2011-03-23 165 views
13

可能重複:
What is the usage of array of zero length?零長度數組

什麼是零長度arrays.Are他們任何使用或就這樣,因爲這個語法允許的目的是什麼?

+0

注意:由於零長度數組是不可變的,所以它們對於給定類型都是相等的,例如對於'int [0]',通常可以使用一個常數零。唯一的例外是,如果你已經使用零長度數組作爲鎖,但這是不好的主意恕我直言。 – 2011-03-23 13:55:09

回答

32

如果你有一個函數接受一個數組,並且你想給它一個沒有任何東西的數組,你傳遞一個零長度的數組。

如果您從外部源讀取數組,並且它恰好沒有任何項目,您將得到一個零長度數組。

+7

使用這種方法意味着需要更少的空檢查 – tofarr 2011-03-23 13:14:29

0

沒有方法,成員或行爲的對象的目的是什麼?數組只是指向連續的內存塊的指針,所以0是有效的長度。

6

沒有理由不允許零長度數組和支持它們避免特殊情況下的許多事情。

例如:如果定義應編譯器傳遞給varArg什麼方法是這樣的:

public void foo(String arg1, String... varArg); 

被稱爲像這樣:

foo("bar"); 

而且,應該是什麼的"".toByteArray("UTF-8")的返回值?

禁止零長度數組會使語言複雜化,同時增加很少的優勢。

1

它避免了必須檢查null是否前提條件是數組始終存在。

4

它們讓您保持API一致,同時避免空值。例如,假設你有一個方法返回一些東西。如果沒有有效的結果,你會返回一個零長度的數組。如果您不得不返回null來表示這個信號,那麼客戶端代碼將不得不以不同的方式處理這兩種情況。使用零長度數組,下列代碼仍然有效:

for (int i = 0; i < array.length; i++) { 
    // do something with the array entries 
} 

如果array.length == 0,則循環的主體永遠不會輸入。

9

假設你的意思是在Java中,你可以在沒有任何問題的情況下迭代零長度的數組,但是如果變量設置爲null,你就不能這樣做。

String[] myArr = new String[0]; 
for (String str : myArr) { 
    // do something here 
} 

如果設置myArrnull相反,你會得到在這個循環中的NullPointerException