2013-02-13 52 views

回答

4

我不認爲必須有一個很好的理由,我認爲可能有很多原因。

但一個是通過使String#length()屬性,它可以在接口而不是聲明(在這種情況下,CharSequence)。接口不能聲明公共實例字段。

+0

好點。但我認爲'CharSequence'是在JDK 1.4中添加的。但是,即使在此之前也存在'String.length()',因此,不確定原始設計的意圖。 – 2013-02-13 15:16:37

0

因爲String不是這樣的數組。 Java設計者設計的數組(這是對象)有一個名爲length的公共字段。

另一方面,一個字符串有一個方法給出的長度,而不是。一般來說,這是一種更傳統的方法,使成員字段爲私有,並使用方法來訪問它們,但對於數組,它不是。

就你而言,它們是具有不同簽名的不同對象。 A String不是char[](雖然內部它可能以這種方式實現)。

1

這是String::length()功能是什麼樣子:

public int length() { 
    return count; 
} 

所以基本上count差點被稱爲length並公之於衆是類似陣列(它是final畢竟)。

這可能只是一個設計決定。可能有一些我們可以推測的促成因素(其中之一可能是Mark Peters提到的CharSequence)。

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. 
+0

C#中的一個屬性等同於在Java中具有getter的私有字段。這裏的問題是爲什麼Java沒有簡單地將'length'作爲公共最終字段。 – 2013-02-13 15:09:56

+0

@CyrilleKarmann我認爲這是一個公共領域。看一下MSDn的例子'Console.WriteLine(characters.Length);' – 2013-02-13 15:13:41

0

爲什麼INT []長度的財產?

數組是java中的特殊對象,它們有一個簡單的屬性,名爲length,它是final的。

數組沒有「類定義」(在任何.class文件中找不到它),它們是語言本身的一部分。

  1. public final field length,它包含數組的組件數。長度可能是正數或零。

  2. 公共方法clone,它覆蓋Object類中相同名稱的方法,並且不引發檢查異常。數組類型T []的克隆方法的返回類型是T []。

  3. 多維數組的克隆很淺,也就是說它只創建一個新的數組。子陣是共享的。

  4. 所有從類Object繼承的成員;沒有繼承的對象的唯一方法是它的克隆方法。

資源:JSL 10.7

Why String.length() a method?

相關問題