可變參數(shù)就是一個(gè)方法可以接收任意多個(gè)參數(shù)塌西!例如:fun()、fun(1)烫葬、fun(1,1)界弧、fun(1,1,1)。你可能認(rèn)為這是方法重載搭综,但這不是重載垢箕,你想想重載能重載多少個(gè)方法,而fun()方法是可以傳遞任何個(gè)數(shù)的參數(shù)兑巾,你能重載這么多個(gè)方法么条获?
1.定義可變參數(shù)方法
public void fun(int… arr) {}
上面方法fun()的參數(shù)類(lèi)型為int…,其中“…”不是省略號(hào)蒋歌,而是定義參數(shù)類(lèi)型的方式帅掘。參數(shù)arr就是可變參數(shù)類(lèi)型。你可以把上面代碼理解為:
public void fun(int[] arr)
堂油。
public int sum1(int[] arr) {
int sum = 0;
for(int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
public int sum2(int... arr) {
int sum = 0;
for(int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
你可能會(huì)想修档,“int[]”和“int…”沒(méi)有什么不同,只是“int…”是一種新的定義數(shù)組形參的方式罷了府框。那么我應(yīng)該恭喜你了吱窝!沒(méi)錯(cuò),這么理解就對(duì)了!但要注意院峡,只有在方法的形參中可以使用int…來(lái)代替int[]兴使。
2.調(diào)用帶有可變參數(shù)的方法
public static int sum( int[] argm){
for (int i=0;i<argm.length;i++){
System.out.println("argmes"+argm[i]);
}
return 1;
}
sum();
sum(1);
sum(1,2);
sum(1,2,3);
這看起來(lái)好像是使用任意多個(gè)參數(shù)來(lái)調(diào)用sum()方法,這就是調(diào)用帶有可變參數(shù)方法的好處了撕予。
3.編譯器“二次加工”
編譯器對(duì)sum方法定義的“二次加工”結(jié)果為:
public int sum(int[] arr) {
int sum = 0;
for(int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
即把“int…”修改為“int[]”類(lèi)型鲫惶。
編譯器對(duì)sum方法調(diào)用的二次加載結(jié)果為:
sum( int[0]);
sum( int[] {1});
sum( int[] {1, 2});
sum( int[] {1, 2, 3});
結(jié)論:可變參數(shù)其實(shí)就是數(shù)組類(lèi)型,只不過(guò)在調(diào)用方法時(shí)方便一些实抡,由編譯器幫我們把多個(gè)實(shí)參放到一個(gè)數(shù)組中傳遞給形參欠母。
可變參數(shù)方法的限制
- 一個(gè)方法最多只能有一個(gè)可變參數(shù);
- 可變參數(shù)必須是方法的最后一個(gè)參數(shù)吆寨。