2016-02-17 38 views
0

void method(String[] a)void method(String... a)有什麼區別?Strings vs String Varargs的陣列

第一種方法採用字符串數組,其中第二種方法採用一個或多個字符串參數。他們提供了哪些不同的功能?

而且,不知道爲什麼,但是這是工作:

public class Test { 

    public static void main(String[] args) { 
     String[] a = {"Hello", "World"}; 
     Test t = new Test(); 
     t.method(a); 
    } 

    void method(String...args) { 
     System.out.println("Varargs");  // prints Varargs 
    } 
} 
+1

第二個是隻是一個*語法糖*你不必傳遞一個固定大小的數組,而是一個逗號分隔的字符串值 – TheLostMind

回答

4

沒有區別,僅在有後,其他元素的簽名。

例如:

public void method(String[] args, String user){} 

是可能的,因爲沒有辦法的JVM會認爲user仍然是args的元素。

public void method(String ... args, String user){} 

雖然會引起麻煩。

+3

只是你知道:底部的例子甚至沒有編譯,java只允許varargs作爲最後一個參數 – Ferrybig

+0

String ... args應該是最後一個參數。作爲公共無效方法(字符串用戶,字符串... args){} –

+0

@Ferrybig這是我的意思是「會造成麻煩,但」,「只有在簽名後有其他元素」 – Stultuske

2

唯一的區別是當您調用該方法時,以及調用它的可能方式,因爲可變參數允許多個字符串用「,」或使用數組作爲參數分隔。

重要提示:

可變參數設有自動化並隱藏在陣列通過多個ARGS 的過程。

Documentation.

編輯: Java不允許這種public void method(String ... args, String user)varargs必須要調用的最後一個參數。

0

不是很好,但有時非常有用: 如果在寫你的代碼,你不知道哪個ARG遊戲的方法獲取作爲輸入的時候你的代碼看起來像

public class Test { 
public static void main(String[] args) {   
    Test t = new Test(); 
    String[] a = {"Hello", "World"}; 
    Integer [] b = {1,2}; 
    t.method(a); 
    t.method(b); 
    t.method('a',1,"String",2.3); 
} 
void method(Object...args) { 
    for (Object arg : args){ 
    System.out.println(arg);   
    }   
} 

}