java 可变参数

Java可变参数

Java中可以允许将同功能, 同名称的参数个数不同的方法合并为一个方法, 就是可变参数方法.
可变参数大大提高了代码的复用性, 通过灵活运用可变参数,我们可以让代码更加简洁、高效,减少冗余。个人感觉这个性质很有趣

简单示例

public class Main {
    public static void main(String[] args) {
        VarParameter varParameter = new VarParameter();
        System.out.println(varParameter.getSum(1, 2, 3));
    }
}

class VarParameter {
    public int getSum(int... numbers) {
        System.out.println("参数个数为: " + numbers.length);
        int res = 0;
        for (int i = 0; i < numbers.length; i++) {
            res += numbers[i];
        }
        return res;
    }
}

可以发现, 传入的number可以被当作数组使用

一些特点:

  1. 可变参数的实参可以为0个或者任意多个
  2. 可变参数的实参可以是一个数组
  3. 可变参数可以和普通参数一起放在形参列表, 但是必须保证可变参数在最后, 且一个形参列表只能出现一个可变参数
public int getSum(String str, int... numbers) {
        System.out.println("参数个数为: " + numbers.length);
        int res = 0;
        for (int i = 0; i < numbers.length; i++) {
            res += numbers[i];
        }
        return res;
    }

本质

深入解析一下java编译器, 就可以发现, 其实java编译器会将可变参数转化为数组, 所以其实可以将其理解为

int getSum(int... numbers) {
}

=> 
int getSum(int[] numbers = new int[] {...}} {

} 

所以我们也可以知道如果我们传入一个数组也是可以编译通过的

public class Main {
    public static void main(String[] args) {
        VarParameter varParameter = new VarParameter();
        System.out.println(varParameter.getSum(1, 2, 3));
        
        int[] arr = new int[] {1, 2, 4};
        varParameter.getSum(arr);
    }
}

class VarParameter {
    public int getSum(int... number) {
        System.out.println("参数个数为: " + number.length);
        int res = 0;
        for (int i = 0; i < number.length; i++) {
            res += number[i];
        }
        return res;
    }
}
posted @ 2023-10-31 11:56  Xingon2356  阅读(39)  评论(0)    收藏  举报