可變參數
可變參數就是一個方法可以接收任意多個參數!例如:fun()、fun(1)、fun(1,1)、fun(1,1,1)。你可能認為這是方法重載,但這不是重載,你想想重載能重載多少個方法,而fun()方法是可以傳遞任何個數的參數,你能重載這么多個方法么?
2.1 定義可變參數方法
public voidfun(int… arr) {}
上面方法fun()的參數類型為int…,其中“…”不是省略號,而是定義參數類型的方式。參數arr就是可變參數類型。你可以把上面代碼理解為:public void fun(int[] arr)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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; } |
你可能會想,“int[]”和“int…”沒有什么不同,只是“int…”是一種新的定義數組形參的方式罷了。那么我應該恭喜你了!沒錯,這么理解就對了!但要注意,只有在方法的形參中可以使用int…來代替int[]。
2.2 調用帶有可變參數的方法
sum1()和sum2()兩個方法的調用:
1
2
|
sum1( new int []{ 1 , 2 , 3 }); sum2( new int []{ 1 , 2 , 3 }); |
這看起來沒什么區別!但是對于sum2還有另一種調用方式:
1
2
3
4
5
6
7
|
sum2(); sum2( 1 ); sum2( 1 , 2 ); sum2( 1 , 2 , 3 ); |
這看起來好像是使用任意多個參數來調用sum2()方法,這就是調用帶有可變參數方法的好處了。
2.3 編譯器“二次加工”
編譯器對sum2方法定義的“二次加工”結果為:
1
2
3
4
5
6
7
|
public int sum2( int [] arr) { int sum = 0 ; for ( int i = 0 ; i < arr.length; i++) { sum += arr[i]; } return sum; } |
即把“int…”修改為“int[]”類型。
編譯器對sum2方法調用的二次加載結果為:
1
2
3
4
|
sum2( new int [ 0 ]); sum2( new int [] { 1 }); sum2( new int [] { 1 , 2 }); sum2( new int [] { 1 , 2 , 3 }); |
結論:可變參數其實就是數組類型,只不過在調用方法時方便一些,由編譯器幫我們把多個實參放到一個數組中傳遞給形參。
2.4 可變參數方法的限制
l 一個方法最多只能有一個可變參數;
l 可變參數必須是方法的最后一個參數。
以上就是小編為大家帶來的淺談Java中的可變參數的全部內容了,希望對大家有所幫助,多多支持服務器之家~