Java中的可变参数
Java1.5后出现了一个新特性,即可变参数,格式为:类型 …参数
例如:
总的来说,可变参数可以当成是数组来用:
1 public void testSum() { 2 System.out.println(sum(1,2,3,4,5)); 3 } 4 5 public int sum(int ...nums) { 6 int sum = 0; 7 for(int i:nums) { 8 sum +=i; 9 } 10 return sum; 11 }
如果方法参数中不止有可变参数,还有别的类型的参数,那么可变参数应该放到方法列表中的最后才不会报错:
1 public void testSum() { 2 System.out.println(sumPlusX(100,1,2,3,4,5)); 3 } 4 5 public int sumPlusX(int x,int ...nums) { 6 int sum = 0; 7 for(int i:nums) { 8 sum +=i; 9 } 10 return sum+x; 11 12 }
可以直接用数组来满足参数是可变参数的方法:
1 public void testSum() { 2 int[] nums = {1,2,3,4,5}; 3 System.out.println(sum(nums)); 4 } 5 6 public int sum(int ...nums) { 7 int sum = 0; 8 for(int i:nums) { 9 sum +=i; 10 } 11 return sum; 12 13 }
最后我们再来看一看比较典型的采用可变参数的方法,在数组工具类Arrays中的asList方法:
从方法参数列表可以看到这也是一个可变参数,接收的是对象,记住是对象!等下我们就可以看到为什么这样强调了。
我们先来一个简单的例子:
1 public void testAsList() { 2 List list = Arrays.asList("1","2","3"); 3 System.out.println(list); 4 }
输出:
再来一个简单的例子:
1 public void testAsList() { 2 String[] str = {"1","2","3","4"}; 3 List list = Arrays.asList(str); 4 System.out.println(list); 5 }
输出:
最后一个例子:
1 public void testAsList() { 2 int[] nums = {1,2,3,4,5}; 3 List list = Arrays.asList(nums); 4 System.out.println(list); 5 }
输出:
前面说过,可以将可变参数当成数组来处理,也可以用数组来满足参数列表为可变参数,对于可变参数是类型来说,对象数组依然可以满足可变参数,但是基本类型数组,因为数组中的元素并不是类型对象,所以只能将整个数组作为一个对象,因此就出现上面第三种情况。
当然如果我们将上面的例子将基本类型改变为其对象包装类,那么就又可以了:
1 public void testAsList() { 2 Integer[] nums = {1,2,3,4,5}; 3 List list = Arrays.asList(nums); 4 System.out.println(list); 5 }
输出: