2011-12-30 90 views
10

我發現做一個數組的長度,當你寫的東西,如:爲數組列表或字符串長度和長度()有什麼區別?

arrayone.length; 

然而,對於這樣的事情,你寫上年底的支架,如以下對於字符串的長度:

stringone.length(); 

,這是什麼的關鍵原因和你怎麼知道什麼時候把括號還是現在?

回答

8
.length; 

直接訪問字段構件。

.length(); 

調用方法(即訪問者)來訪問字段構件。

String的情況下,這是預料之中的,因爲它是不可變的

0

.length()是一個String類的方法,它返回字符串中的字符數。

.length將給出存儲在數組中的元素的數量。

public class length 
{ 
public static void main(String args[]) 
{ 
String x="test"; 
int a[]={1,2,3,4}; 
System.out.println(x.length()); 
System.out.println(a.length); 
} 
} 

// output 
4 
4 
2

唯一真正知道何時使用哪種體驗的方法。儘管具有自動完成功能的IDE通常會在您不記得時幫助您。

大部分(並不總是)array.length,System.out和System.err是最常見的3,你會遇到的實際上是成員訪問而不是方法調用。

0

Array.lengthArray的屬性,類似於變量引用。

ArrayList.size()是對數組列表對象的實際方法調用。

3

Arrays的處理方式不同於StringsArrayLists或其他任何可以用Java計算的東西。 Array幾乎是一個本地類型,它的長度在初始化後永遠不能改變,所以不需要封裝。長度變量可以直接暴露,沒有副作用。

爲什麼String使用方法,而不是一個變量的原因是因爲它內部使用char[],它不希望公開揭露(對於不變性/封裝),所以它包裝在length()方法的長度是可變的。 ArrayList有一個size()方法而不是一個length變量是相同的原因。

唯一一次使用變量而不是方法是數組。其他一切都將是方法。也就是說,除了數組外,你會使用括號。

0
int[] myArray = new int[10]; 
String myString = "hello world!"; 
List<int> myList = new ArrayList<int>(); 

myArray.length //gives the length of the array 
myString.length() //gives the length of the string 
myList.size()  //gives the length of the list 

它很可能是字符串和數組被設計在不同的時間,因此最終使用不同的約定。一個理由是由於字符串在內部使用數組,所以使用了length()方法來避免重複相同的信息。最終,這只是一個不一致的演變,如果語言從頭開始重新設計,那麼演變肯定會得到解決。 :d

+0

不是。它並不是說它們是在不同的時間設計的。任何有'尺寸'的東西 – 2011-12-30 03:11:15

0

的主要區別是,在A)第一種情況下其例如int[]Object[]double[]陣列類型,等..具有稱爲lenght和B)第二殼體是具有對象字符串公共字段一個稱爲length()的函數,該函數可能被稱爲getLength()或別的東西。數組類型的公共字段長度可能是C++處事方式的後遺症。

數組類型有以下幾種:

  • 公共最終字段長度,其中包含所述陣列的 部件的數量(長度可以是正的或零)
  • 公共方法克隆,其覆蓋類Object中同名 的方法,並且不引發檢查異常
  • 所有成員從Object繼承; 的唯一方法未繼承的對象是其克隆方法

請看this, Array Types

0

length是一個僞數據成員引用,只適用於(small-a)數組(忽略可定義實現該成員的類)。

其他一切都是類的對象,並且具有此概念的所有JDK類都定義了length()size()實例方法。 (我希望他們一直保持一致並挑選其中一個,但那是橋上的水。)

相關問題