2014-12-22 57 views
0

我正在讀一本關於java和筆者做了一些可變參數。它是有些事情是這樣的:可變aguments(可變參數)的Java使用

public int num(int ... nums){} 

,我做了一些研究,它看起來像nums簡直是一個數組。所以我想上面的代碼可以再換爲:

public int num(int[] nums){} 

我的問題:什麼是可變參數的意義呢?你可以改變其他類型,如String

+0

甲骨文給了一個很好的解釋在這裏 - > http://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs。 html – Kapparino

+0

http://stackoverflow.com/questions/7951339/when-to-prefer-a-varargs-list-to-an-array – Panther

回答

5

的區別是在您如何調用該方法。

如果你的方法是這樣的:

public int num(int[] nums){} 

,你可以這樣調用它:

num(new int[] { 1, 2, 3 }); 

在另一方面,如果你使用的可變參數是這樣的:

public int num(int ... nums){} 

你可以這樣稱呼它:

num(1, 2, 3) 
0
System.out.println("%s %s %s.", "this", "is", "why"); 

System.out.println("%s %s %s %s?", new String[] {"or", "you", "prefer", "this"}); 
1

可變參數只是語法糖,讓你寫

num(1,2,3); 

,而不是

num(new int[] {1,2,3}); 
0

Varargs(可變參數)運行程序時確實得到打包成一個陣列。有做這樣的

public int add(int... addends); 

一個電話,這個

public int add(int[] addends); 

的Java會爲你創建一個int[]並將其存儲在原變量加數的功能沒有差異。在後者中,你做到這一點,add函數的調用者必須自己創建數組。這可能有點難看,所以Java使它變得簡單。你叫喜歡的可變參數方法,以便:

int sum = add(1,2,3,4,5,6); 

你打電話像這樣的陣列方法:

int sum = add(new int[] {1,2,3,4,5,6}); 

可變參數可用於不僅僅是原語,你嫌多;你可以用它們爲(任何味道),以及對象:

public Roster addStudents(Student... students) {} 

從文章引述鏈接:

所以,當你要使用可變參數?作爲客戶,只要API提供它們,您就應該利用它們。核心API的重要用途包括反射,消息格式化和新的printf工具。作爲一名API設計師,只有在真正引人注目的好處時,才應該謹慎使用它們。一般來說,您不應該重載可變參數方法,否則程序員很難確定哪個重載會被調用。

編輯:新增例如使用對象