可变参数 ----- 用来编写框架
原理:int... args 相当于 int[] args , 调用可变参数方法时,传入任意个数参数,任意个数参数都会被保存参数数组中
例如:add(int... args)
add(10,20) ----- > add(new int[]{10,20});
add(20,30,40) ----- > add(new int[]{20,30,40});
add() ------- add(new int[] {});
原理:int... args 相当于 int[] args , 调用可变参数方法时,传入任意个数参数,任意个数参数都会被保存参数数组中
例如:add(int... args)
add(10,20) ----- > add(new int[]{10,20});
add(20,30,40) ----- > add(new int[]{20,30,40});
add() ------- add(new int[] {});
* 可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数
package cn.com.corotata;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class VariableParameter {
@Test
public void test1(){
int[] arr ={1,2,3};
//使用Arrays.asList将数组转化为List
List<int[]> list = Arrays.asList(arr);//转化时,会将int[]当成一个元素
System.out.println("list1.size ="+list.size());//list1.size =1
for (int[] is : list) {
System.out.println("list1中的值为:"+is);//list1中的值为:[I@1c78e57
}
Integer[] arr2 ={1,2,3};//转化时,会将它当成一个数组进行传递
List<Integer> list2 = Arrays.asList(arr2);
System.out.println("list2.size ="+list2.size());//list2.size =3
System.out.print("list2中的值为:");
for (Integer integer : list2) {
System.out.print("\t"+integer.toString()+"\t");//list2中的值为:1 2 3
}
System.out.println();
/*
* list3 是不是ArrayList?
* 该ArrayList不是我们平常的ArrayList,而是Arrays里面的一个static类,
* private static class ArrayList<E> extends AbstractList<E>
* 他的长度是不能改变的,即你不能调用他的add或者remove方法
*/
List<Integer> list3 = Arrays.asList(10,20,30);//Arrays.asList(10,20,30)相当于Array.asList(new Integer[]{10,20,30})
System.out.println("list3.size ="+list3.size());//list3.size =3
list3.add(100);//会报错
list3.remove(30);//会报错
/*
* Arrays.asList(arr2,10,20),返回<Serializable> List<Serializable> java.util.Arrays.asList(Serializable... a),
* 在这里arr2直接当成一个元素传入
*/
List list4 = Arrays.asList(arr2,10,20);
System.out.println(list4.size());//3
}
@Test
public void test2(){
System.out.println("sum="+add(10,20));//30
System.out.println("sum="+add(10,20,30));//60
System.out.println("sum="+add());//0,传入一个长度为0的数组new int[0]
System.out.println("sum="+add(new int[]{10,20,30}));//60
}
public int add(int...num){
int sum = 0;
for (int i : num) {
sum+=i;
}//
return sum;
}
}