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]);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章