我正在讀一本關於java和筆者做了一些可變參數。它是有些事情是這樣的:可變aguments(可變參數)的Java使用
public int num(int ... nums){}
,我做了一些研究,它看起來像nums
簡直是一個數組。所以我想上面的代碼可以再換爲:
public int num(int[] nums){}
我的問題:什麼是可變參數的意義呢?你可以改變其他類型,如String
?
我正在讀一本關於java和筆者做了一些可變參數。它是有些事情是這樣的:可變aguments(可變參數)的Java使用
public int num(int ... nums){}
,我做了一些研究,它看起來像nums
簡直是一個數組。所以我想上面的代碼可以再換爲:
public int num(int[] nums){}
我的問題:什麼是可變參數的意義呢?你可以改變其他類型,如String
?
的區別是在您如何調用該方法。
如果你的方法是這樣的:
public int num(int[] nums){}
,你可以這樣調用它:
num(new int[] { 1, 2, 3 });
在另一方面,如果你使用的可變參數是這樣的:
public int num(int ... nums){}
你可以這樣稱呼它:
num(1, 2, 3)
System.out.println("%s %s %s.", "this", "is", "why");
System.out.println("%s %s %s %s?", new String[] {"or", "you", "prefer", "this"});
可變參數只是語法糖,讓你寫
num(1,2,3);
,而不是
num(new int[] {1,2,3});
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設計師,只有在真正引人注目的好處時,才應該謹慎使用它們。一般來說,您不應該重載可變參數方法,否則程序員很難確定哪個重載會被調用。
編輯:新增例如使用對象
甲骨文給了一個很好的解釋在這裏 - > http://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs。 html – Kapparino
http://stackoverflow.com/questions/7951339/when-to-prefer-a-varargs-list-to-an-array – Panther