2012-08-02 37 views
0

它是我不確定的東西,而不是一個問題。我在測試過程中遇到過的這段代碼。我現在將代碼粘貼到這裏。我有一個函數void f(Strings ... obj)

static void count(String...obj){ 
    System.out.println(obj.length); 
} 

public static void main(String str[]){ 
    count(null,null,null); 
    count(null,null); 
    count(null); 
} 

程序運行正常,輸出爲3 2,在過去數調用它拋出一個零點異常(顯然不夠)。其中是順便測試問題。 不管怎樣,我無法理解什麼樣的函數參數是(String ... obj)。 有人可以幫助我吧。

回答

6

這是一個varargs parameter,它基本上允許您指定多個參數並讓編譯器爲您創建一個數組。

您在最後一行得到NPE的原因是編譯器有效地具有之間的選擇:

count(new String[] { null }) 

count((String[]) null) 

...它更喜歡後者。

你可以迫使它通過鑄造null使用前轉換:

count((String) null); 
+0

謝謝你有幫助..你能解釋count(new String [] {null})和count((String [] null)之間的區別 – 2012-08-09 19:10:58

+0

@KanwaljeetSingh:好的 - 第一個是對數組的引用只有一個元素,而元素爲null;第二個元素只是一個空引用 - 根本沒有數組。 – 2012-08-09 19:22:21

0

這是指定數組參數的另一個版本。

count(String...obj) 

手段計數方法接受字符串[]

其等於

count(String[] obj) 
0

字符串...它可以是一個字符串參數的繼承,或一個字符串數組。當我把它放置null時,我猜它被解釋爲一個空數組。

0

這些方法參數被稱爲varargs,並允許給定類型的任意數量的參數傳入您的方法。正如an answer to another question中所述,它們是在Java 1.5中引入的,儘管它們不適用於Java移動版本。

相關問題