当我们谈论数组时,为什么长度是一个数据字段?当我们在Java中讨论String时,为什么 length()?的意思是:
int a[10] = {1,2,3,4,5,6,7,8,9,10};
String str = "foo";
int a_len = a.length;
int str_len = str.length();
为什么长度不是数组的函数,反之亦然?
答案 0 :(得分:9)
简单地说:这就是它的方式,以及它一直以来的方式。
JLS section 10.7中指定数组具有公共最终length
字段。为了保持一致性,它可以被指定为一种方法 - 但它并不是......同样String
可以做出实施决定以获得公开最终{{ 1}}字段 - 但同样,它不会那样。
自1.0以来存在一些不一致的情况 - 显然这些事情在发布后确实无法改变......
答案 1 :(得分:4)
String
实现CharSequence
因此length
需要成为一种方法,因为接口只能指定方法。
数组不需要实现任何接口,因此在这种情况下length
被实现为公共final字段,以避免额外的方法调用开销。
修改强>
正如Hot Licks在下面指出的那样,{1.4}之前不存在CharSequence
。尽管CharSequence显然不是这种设计选择背后的原因(因为它不存在),但选择这种设计仍然有意义,因为String可能需要在未来实现新的接口。
答案 2 :(得分:0)
它被认为是变量而不是方法。这就好像你创建了一个类并且表示公共静态int num以及稍后在一个方法中告诉num等于全局