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

Java 为什么string.length()是一个方法,int[].length是一个属性?,java,arrays,string,integer,Java,Arrays,String,Integer,为什么String.length()是一个方法,int[].length是一个属性(见下文) 我不认为有什么好的理由,我认为可能有很多理由 但一个是,通过将String#length()作为属性,可以在接口中声明它(在本例中)。接口不能声明公共实例字段。我不认为有什么好的原因,我认为可能有很多原因 但一个是,通过将String#length()作为属性,可以在接口中声明它(在本例中)。接口无法声明公共实例字段。,因为字符串本身不是数组。Java的设计者将数组(即对象)设计成一个名为length的

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


我不认为有什么好的理由,我认为可能有很多理由


但一个是,通过将
String#length()
作为属性,可以在接口中声明它(在本例中)。接口不能声明公共实例字段。

我不认为有什么好的原因,我认为可能有很多原因


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

,因为字符串本身不是数组。Java的设计者将数组(即对象)设计成一个名为
length
的公共字段

另一方面,字符串有一个方法,该方法给出长度。一般来说,将成员字段设置为私有并使用方法访问它们是一种更为传统的方法,但在数组的情况下并非如此


就你而言,它们是具有不同特征的不同对象。
String
不是
char[]
(虽然在内部它可能是这样实现的)。

因为String本身不是数组。Java的设计者将数组(即对象)设计成一个名为
length
的公共字段

另一方面,字符串有一个方法,该方法给出长度。一般来说,将成员字段设置为私有并使用方法访问它们是一种更为传统的方法,但在数组的情况下并非如此


就你而言,它们是具有不同特征的不同对象。
String
不是
char[]
(虽然在内部它可能是这样实现的)。

这就是
String::length()
函数的外观:

public int length() {
    return count;
}
因此本质上
count
可以被称为
length
,并公开为类似于数组(毕竟是
final


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

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

public int length() {
    return count;
}
因此本质上
count
可以被称为
length
,并公开为类似于数组(毕竟是
final


这可能只是一个设计决定。我们可以推测可能有一些促成因素(其中一个可能是马克·彼得斯提到的
CharSequence
事件)。

我认为没有特别的原因。事实上,在一种非常类似的语言C#中,
String.length
是一个属性。但看看C#designer对这种设计的看法:

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.

我想没有什么特别的原因。事实上,在一种非常类似的语言C#中,
String.length
是一个属性。但看看C#designer对这种设计的看法:

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.

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

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

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

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

  • 公共方法克隆,它重写类对象中同名的方法,并且不抛出任何已检查的异常。数组类型T[]的克隆方法的返回类型为T[]

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

  • 从类对象继承的所有成员;对象的唯一未继承方法是其克隆方法

  • 资源:


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

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

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

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

  • 公共方法克隆,它重写类对象中同名的方法,并且不抛出任何已检查的异常。数组类型T[]的克隆方法的返回类型为T[]

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

  • 从类对象继承的所有成员;对象的唯一未继承方法是其克隆方法

  • 资源:


    该“duplicate”中的Top Vote答案不是特别有用。该“duplicate”中的Top Vote答案不是特别有用。C#中的属性相当于Java中带有getter的私有字段。这里的问题是为什么Java没有简单地将
    length
    作为一个公共的final字段。@CyrilleKarmann我认为这是一个公共字段。看看MSDn示例
    Console.WriteLine(characters.Length)C#中的属性相当于Java中带有getter的私有字段。这里的问题是为什么Java没有简单地将
    length
    作为一个公共的final字段。@CyrilleKarmann我认为这是一个公共字段。看看MSDn示例
    Console.WriteLine(characters.Length)好的观点。但是我认为jdk1.4中添加了
    CharSequence
    。但是,
    String.length()
    甚至在这之前就已经存在了,因此,不能确定原始设计的意图。这一点很好。但是我认为jdk1.4中添加了
    CharSequence
    。但是,
    String.length()
    甚至在这之前就已经存在,因此,不确定其意图