为什么 .length() 不是 Java 中的数组方法?

joe*_*obz 6 java arrays methods

可能的重复:
Java - Array 的长度属性
String.length() 与 Array.length

我目前在高中的 AP 计算机科学课上,我在阅读中遇到了这个问题。

据我了解,.length()是用于字符串的方法,但为什么.length()应用于数组时不是方法?我知道它们是不同的对象,但是为什么 Java 不制作另一种方法来查找数组的长度?

我很感激我得到的任何回应。谢谢!

Mic*_*ael 5

由于数组是在实例化时定义的固定长度,因此长度是类上的公共最终字段。没有必要使它成为一种方法,因为在运行时不需要进行计算。

有关详细信息,请参阅 Java 规范的这一部分:http : //docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.7

现在,至于为什么他们没有提供访问器方法来获取值的设计问题没有指定。也许这是在设置任何其他约定之前完成的,这只是一个遗留问题。只有语言设计者会知道他们决定这样做的“原因”部分。

  • 不过,对于 String 也可以这样说。 (7认同)

ass*_*ias 2

数组在Java 语言规范 #10.7中定义。尤其:

数组类型的成员如下:

  • 公共最终字段长度,包含数组的组成部分的数量。长度可以是正数或零。
  • [...]

我无法回答为什么语言设计者选择这种方法。

有趣的是,在Java 的祖先Oak 规范中就已经是这种情况了。

  • 在幕后,获取数组“字段”的长度实际上是使用“arraylength”字节码指令。对于 getClass() 来说,这是一个实际的虚拟方法调用。 (3认同)
  • @Thilo - 为什么它会干扰子类化?类是对象中的最终字段。 (2认同)