> 文章列表 > Java之可变参数

Java之可变参数

Java之可变参数

目录

一.可变参数的引入

1.问题引入

2.可变参数的使用

二.可变参数的注意点

1.可变参数只能定义一个

2.可变参数必须是函数参数的最后一个​编辑


一.可变参数的引入

1.问题引入

当我们需要定义一个方法sum,接受任意个整型变量,结果返回这些整型变量的和.

我们没有学习可变参数之前,我们首先想到的肯定是用数组来存储这任一个整型变量,然后遍历这个数组来求这些变量的和

    public static void main(String[] args) {System.out.println(sum(new int[]{1, 2, 3, 4}));//10}public static int sum(int[] nums) {int sum = 0;for (int num : nums) {sum += num;}return sum;}

2.可变参数的使用

JDK 1.5的新特性,方法支持可变参数,表示这个参数的长度是任意的.

下面的代码是利用可变参数来替代数组实现sum方法

    public static void main(String[] args) {System.out.println(sum(1, 2, 3, 4));//10}public static int sum(int... nums) {int sum = 0;for (int num : nums) {sum += num;}return sum;}

其实可变参数的本质上就是数组,但是这种形式我们代码可以有一定的优化,在调用的sum函数的时候,我们可以不必创建数组,可以直接将这些值传入到可变参数nums中

注意:参数的个数可以是0个,没有上限

二.可变参数的注意点

1.可变参数只能定义一个

这个时候编译期间会进行报错

我们思考下为什么不能定义两个可变参数,其实很容易就可以想明白,当我们调用函数的时候,我们出入一连串的值的时候,我们无法确定可变参数的分别有多少个,例如

sum(1,2,3,4,5);   这个时候nums1可能有0到5个,nums2也有可能有0到5个

2.可变参数必须是函数参数的最后一个

当可变参数不是最后一个的时候,编译器会报如上的错误,这个时候我们把可变参数nums1放到参数x的后面就不会报错误了.

这里我们也可以思考一下为什么不能这样,当我们调用函数的时候,我们出入一串的参数,这个时候我们不知道可变参数到底能接受到多少个值,不知道在哪里结束,所以会产生歧义,例如:

sum(1,2,3,4,5);这个时候nums1可接受到0到5个,当可变参数nums1接受小于4个时候,还剩下的参数无法满足后面只有一个参数x的要求,当可变参数nums1接受5个参数的时候,x接受不到参数,这个时候也不满足要求