赞
踩
目录
当我们需要定义一个方法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;
- }
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个,没有上限
这个时候编译期间会进行报错
我们思考下为什么不能定义两个可变参数,其实很容易就可以想明白,当我们调用函数的时候,我们出入一连串的值的时候,我们无法确定可变参数的分别有多少个,例如
sum(1,2,3,4,5); 这个时候nums1可能有0到5个,nums2也有可能有0到5个
当可变参数不是最后一个的时候,编译器会报如上的错误,这个时候我们把可变参数nums1放到参数x的后面就不会报错误了.
这里我们也可以思考一下为什么不能这样,当我们调用函数的时候,我们出入一串的参数,这个时候我们不知道可变参数到底能接受到多少个值,不知道在哪里结束,所以会产生歧义,例如:
sum(1,2,3,4,5);这个时候nums1可接受到0到5个,当可变参数nums1接受小于4个时候,还剩下的参数无法满足后面只有一个参数x的要求,当可变参数nums1接受5个参数的时候,x接受不到参数,这个时候也不满足要求
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。