为什么 String.length() 是一个方法?

2022-09-02 23:54:21

如果 String 对象是不可变的(因此显然不能更改其长度),为什么是方法,而不是简单地像数组中存在的那样存在?length()public final int length

它只是一个 getter 方法,还是进行某种计算?

只是试图看到这背后的逻辑。


答案 1

Java是一个标准,而不仅仅是一个实现。不同的供应商可以以不同的方式许可和实现Java,只要他们遵守标准。通过对字段进行标准调用,这无缘无故地严重限制了实现。

此外,就类的未来而言,方法要灵活得多。除了在一些非常早期的Java类中,几乎从未做过将最终常量公开为可以与类的每个实例具有不同值的字段,而不是作为方法。

该方法早于CharSequence接口,可能来自其第一个版本。看看效果如何。几年后,在没有任何向后兼容性损失的情况下,引入了CharSequence接口,并且很好地适应了。这在一个领域是不可能的。length()

因此,让我们真正反转这个问题(当你设计一个打算在几十年内保持不变的类时,你应该做什么):一个字段在这里获得了什么,为什么不简单地让它成为一种方法呢?


答案 2

也许一个方法被认为与 a 的相应方法更一致,它显然需要的不仅仅是一个成员变量。.length()StringBufferfinal

该类可能是有史以来为Java定义的最早的类之一。有可能(这只是推测)实现甚至在成员变量存在之前就使用了方法。用不了多久,该方法的使用就很好地嵌入到当时存在的Java代码主体中。String.length()final