爲什麼String.length()是一個方法,而int []。是一個屬性(見下文)?爲什麼string.length()是一個方法,而int []。是一個長度屬性?
int[] nums = {2,4,7,12,43};
String phrase = "Hello, world.";
System.out.length(nums.length);
System.out.length(phrase.length());
爲什麼String.length()是一個方法,而int []。是一個屬性(見下文)?爲什麼string.length()是一個方法,而int []。是一個長度屬性?
int[] nums = {2,4,7,12,43};
String phrase = "Hello, world.";
System.out.length(nums.length);
System.out.length(phrase.length());
我不認爲必須有一個很好的理由,我認爲可能有很多原因。
但一個是通過使String#length()
屬性,它可以在接口而不是聲明(在這種情況下,CharSequence
)。接口不能聲明公共實例字段。
好點。但我認爲'CharSequence'是在JDK 1.4中添加的。但是,即使在此之前也存在'String.length()',因此,不確定原始設計的意圖。 – 2013-02-13 15:16:37
因爲String不是這樣的數組。 Java設計者設計的數組(這是對象)有一個名爲length
的公共字段。
另一方面,一個字符串有一個方法給出的長度,而不是。一般來說,這是一種更傳統的方法,使成員字段爲私有,並使用方法來訪問它們,但對於數組,它不是。
就你而言,它們是具有不同簽名的不同對象。 A String
不是char[]
(雖然內部它可能以這種方式實現)。
這是String::length()
功能是什麼樣子:
public int length() {
return count;
}
所以基本上count
差點被稱爲length
並公之於衆是類似陣列(它是final
畢竟)。
這可能只是一個設計決定。可能有一些我們可以推測的促成因素(其中之一可能是Mark Peters提到的CharSequence
)。
沒有特別的理由,我想。事實上在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.
C#中的一個屬性等同於在Java中具有getter的私有字段。這裏的問題是爲什麼Java沒有簡單地將'length'作爲公共最終字段。 – 2013-02-13 15:09:56
@CyrilleKarmann我認爲這是一個公共領域。看一下MSDn的例子'Console.WriteLine(characters.Length);' – 2013-02-13 15:13:41
爲什麼INT []長度的財產?
數組是java中的特殊對象,它們有一個簡單的屬性,名爲length,它是final的。
數組沒有「類定義」(在任何.class文件中找不到它),它們是語言本身的一部分。
public final field length,它包含數組的組件數。長度可能是正數或零。
公共方法clone,它覆蓋Object類中相同名稱的方法,並且不引發檢查異常。數組類型T []的克隆方法的返回類型是T []。
多維數組的克隆很淺,也就是說它只創建一個新的數組。子陣是共享的。
所有從類Object繼承的成員;沒有繼承的對象的唯一方法是它的克隆方法。
資源:JSL 10.7
熱門投票的答案在 '重複' 是不是特別有用。 – Perception 2013-02-13 15:02:24