9

为什么当我们谈论数组时长度是数据字段,而当我们谈论Java 中的字符串时,为什么是 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();

为什么长度不是数组的函数,反之亦然?

4

3 回答 3

9

简单地说:就是这样,而且一直都是这样。

JLS 第 10.7 节中指定数组有一个公共的 finallength字段。为了保持一致性,它可以被指定为一种方法——但它不是......同样String 可以做出一个实现决定来拥有一个公共的 finallength字段——但同样,它恰好不是那样的。

自 1.0 以来存在一些不一致的地方 - 显然这些东西在发布后真的无法改变......

于 2012-10-17T17:34:40.293 回答
4

String实现CharSequence,因此length在这种情况下需要成为方法,因为接口只能指定方法。

数组不需要实现任何接口,因此length在这种情况下实现为公共 final 字段以避免额外的方法调用开销。

编辑:

正如 Hot Licks 在下面指出的,CharSequence在 Java 1.4 之前并不存在。尽管 CharSequence 显然不是这种设计选择背后的驱动原因(因为它不存在),但选择这种设计仍然是有意义的,因为 String 可能需要在未来实现新的接口。

于 2012-10-17T17:39:44.630 回答
0

它被认为是变量而不是方法。就好像您创建了一个类并说 Public static int num 然后在一个方法中告诉该 num 等于全局

于 2012-10-17T17:34:25.353 回答