如果我們定義一個方法需要接受多個參數,並且多個參數的類型一致,傳統的做法是定義一個數組作爲方法的形參,例如這樣:
public static int sum(int[] arr)
調用方法的時候我們又需要自己把數據封裝到一個數組中傳遞
int res = sum(new int[]{1,2,3});
然而從 JDK 1.5 之後,出現了簡化操作,我們可以在方法定義可變參數,例如這樣:
public static int sum(int...arr)
調用的時候可以直接傳遞多個參數,而不用封裝到數組中。
int res = sum(1,2,3);
它和傳統做法完全是等價的。編譯成class文件時,方法中傳遞過來的多個參數會先被封裝到一個數組中,再進行傳遞。
下面是一個Demo:
import com.sun.istack.internal.NotNull;
public class Demo {
public static void main(String[] args) {
System.out.println(sum(1,2,3,5));
}
//arr是數組名,我們可以通過指定索引的方式訪問其元素
public static int sum(@NotNull int... arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}
細節:
- 如果希望方法的參數列表中既有可變參數還有普通的形參,那麼可變參數就必須放在最後。
public static int sum(double a,int...arr)
正確寫法
public static int sum(int...arr,double a)
錯誤寫法 - 無法在同一方法上定義多個可變參數。
- 可變參數的類型定義爲Object,方法將最大程度通用化。
public class Demo {
public static void main(String[] args) {
printObject("小明", 1, 2.0, false, 'a');
}
public static void printObject(Object... arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}