1. 程式人生 > >Java不定長引數

Java不定長引數

我們使用過載方法的方式解決了對不同的引數型別、引數個數進行同樣的計算。但有時會遇到型別相同,但引數數量不定的情況,如果此時依然使用方法過載將會使得程式碼異常臃腫甚至無法實現。這時你可能會想到使用陣列,但Java提供了不定長引數的機制使得在語法和寫法上更為優雅。

示例:

public class Test{  
    public static void main(String[] args) {  
        test("aaa");  
        test("aaa", "bbb");  
        test("aaa", "bbb", "ccc");  
    }  
    public
static void test(String arg, String... args) { System.out.println(arg); System.out.println("----------------"); //從陣列中取出 for (String s : args) { System.out.println(s); } } }

語法為:引數型別… 引數名

實際上引數為對應型別的陣列,比如int...實際上是int[]。如果一個方法的引數是不定引數的話,這個引數將在編譯時根據引數個數動態生成一個數組

,然後傳入方法執行。

//正常輸出123
public class DailyTest {
    public static void main(String[] args) {
        test(1,2,3);
    }
    public static void test(int... is) {
        for(int i=0; i<is.length; i++) {
            System.out.println(is[i]);
        }
    }
}

需要注意的是:

  • 方法的引數列表中最多隻能存在一個不定長引數;因為如果同時存在多個不定長引數編譯器將無法區分普通引數與不定長引數的間隔。
  • 如果一個方法中存在不定長引數那必須將它置為引數列表的最後一個引數,理由同上。不滿足這兩個條件中任意一個都無法通過編譯。
  • 不定引數可以出現在過載方法中。