可变参数

来源:互联网 发布:淘宝没有鼠尾草籽 编辑:程序博客网 时间:2024/06/05 10:35
可变参数 ----- 用来编写框架
原理: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 {@Testpublic void test1(){int[] arr ={1,2,3};//使用Arrays.asList将数组转化为ListList<int[]> list = Arrays.asList(arr);//转化时,会将int[]当成一个元素System.out.println("list1.size ="+list.size());//list1.size =1for (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 =3System.out.print("list2中的值为:");for (Integer integer : list2) {System.out.print("\t"+integer.toString()+"\t");//list2中的值为:123}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 =3list3.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}@Testpublic void test2(){System.out.println("sum="+add(10,20));//30System.out.println("sum="+add(10,20,30));//60System.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;}}



原创粉丝点击