为什么string.length()是一个方法,而int []。长度是一个属性?

时间:2013-02-13 14:55:17

标签: java arrays string integer

为什么String.length()是一个方法,而int [] .length一个属性(见下文)?

int[] nums = {2,4,7,12,43};
String phrase = "Hello, world.";

System.out.length(nums.length);
System.out.length(phrase.length());

5 个答案:

答案 0 :(得分:4)

我认为没有充分的理由,我认为可能有很多原因。

但是一个是通过使String#length()成为属性,它可以在接口中声明(在本例中为CharSequence)。接口无法声明公共实例字段。

答案 1 :(得分:1)

这就是String::length()函数的样子:

public int length() {
    return count;
}

所以基本上count可以被称为length并公开与数组相似(毕竟它是final

这可能只是一个设计决定。可能有一些我们可以推测的因素(其中一个可能是Mark Peters提到的CharSequence事件。)

答案 2 :(得分:0)

因为String不是这样的数组。 Java的设计者设计了一个名为length的公共字段的数组(它们是对象)。

另一方面,String有一个给出长度的方法。一般来说,将成员字段设为私有并使用方法来访问它们是一种更传统的方法,但对于数组则不是。

就您而言,它们是具有不同签名的不同对象。 String不是char[](虽然在内部可能会以这种方式实现)。

答案 3 :(得分:0)

我认为没有特别的原因。事实上,在C#中,一种非常相似的语言,String.length是一个属性http://msdn.microsoft.com/en-us/library/system.string.length.aspx。但是看看C#设计师对这个设计有什么看法:

The Length property returns the number of Char objects in this instance, not the number of Unicode characters.
The reason is that a Unicode character might be represented by more than one Char. Use the 
System.Globalization.StringInfo class to work with each Unicode character instead of each Char.

答案 4 :(得分:0)

为什么int []。长度属性?

数组是java中的特殊对象,它们有一个名为length的简单属性,它是最终的。

没有数组的“类定义”(你无法在任何.class文件中找到它),它们是语言本身的一部分。

  1. 公共最终字段长度,包含数组的组件数。长度可以是正数或零。

  2. 公共方法clone,它覆盖Object类中相同名称的方法,并且不会抛出任何已检查的异常。数组类型T []的克隆方法的返回类型是T []。

  3. 多维数组的克隆很浅,也就是说它只创建一个新数组。子阵列是共享的。

  4. 所有成员都继承自Object类;唯一没有继承的Object方法是它的克隆方法。

  5. 资源:JSL 10.7

    Why String.length() a method?