Java基礎|可變參數

如果我們定義一個方法需要接受多個參數,並且多個參數的類型一致,傳統的做法是定義一個數組作爲方法的形參,例如這樣:

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;
    }
}

細節

  1. 如果希望方法的參數列表中既有可變參數還有普通的形參,那麼可變參數就必須放在最後。
    public static int sum(double a,int...arr)正確寫法
    public static int sum(int...arr,double a)錯誤寫法
  2. 無法在同一方法上定義多個可變參數。
  3. 可變參數的類型定義爲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]);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章