天天看點

Java可變參數

<code><b>public</b> <b>void</b> add(<b>int</b>[] ints) { } <b>public</b> <b>void</b> add(<b>int</b>...intt) { }</code>

以上代碼是無法通過編譯的。

可變參數是jdk5的一個新特性,在此之前是通過數組來滿足需求的。是以可變參數可以接受一個相同類型的數組,但是數組類型的參數不能夠接受可變參數。

<code>@test <b>public</b> <b>void</b> test01() {      <b>int</b>[] ints = {1, 3, 9, 20};      add2(ints); //這句代碼可以正确運作(可變參數接受數組)      add2(1, 3, 9, 20); //這句代碼可以正确運作(可變參數接受可變參數)      add(ints); //這句代碼可以正确運作(數組參數接受數組)      add(1, 3, 9, 20); //這句代碼無法通過編譯(數組參數接受可變參數) } <b>public</b> <b>int</b> add(<b>int</b>[] ints) {     <b>int</b> sum = 0;     <b>for</b> (<b>int</b> anint : ints) {         sum += anint;     }     <b>return</b> sum; } <b>public</b> <b>int</b> add2(<b>int</b>...intt) {     <b>int</b> sum = 0;     <b>for</b> (<b>int</b> anint : intt) {         sum += anint;     }     <b>return</b> sum; }</code>

這個很容易就可以想明白。如果第一個參數是可變參數的話,那麼編譯器就要瘋了,因為它不知道到底哪個是第2個參數。

<code><b>public</b> <b>void</b> add(<b>int</b>...intt, string s) { }//這個方法無法通過編譯器的檢查。</code>