java可变参数

来源:互联网 发布:平面构成 知乎 编辑:程序博客网 时间:2024/06/05 17:05

JDK1.5新特性:

静态导入:

import static java.lang.Math.*;


可变参数

public class Test2 {
public static void main(String[] args)
{
String[] a4 = new String[]{"a","b","c"};
String[] a5 = new String[]{"l","w","e"};
int[] a1 = new int[]{3,5,9};
System.out.println(Arrays.asList(a4));                                 //传一个数组      1
System.out.println(Arrays.asList(a4,a5));                              //传两个数组,自动封装成一个数组 a4\a5是这个数组的两个元素   2
System.out.println(Arrays.asList("c","g","j"));                        //传三个字符串对象,自动封装成一个数组   3
System.out.println(Arrays.asList(1,2,3));                              //自动封装成Integer对象,再自动封装成一个数组    4
System.out.println(Arrays.asList(a1));                                 //一个整型数组对象,自动封装成一个数组的一个元素   5
}

}


结果是
[a, b, c]
[[Ljava.lang.String;@dc8569, [Ljava.lang.String;@1bab50a]
[c, g, j]
[1, 2, 3]
[[I@150bd4d]

public static<T> List<T> asList(T...a)     //1.5以后的版本   传入元素 自动封装成数组(如果这个元素不是唯一个数组的话)
public static List asList(Object[] a)   //旧版本

由上面可以看出,可变参数
如果传入的是有且只有一个数组(并且这个数组里面储存的是对象), 会认为兼容旧版本 这个数组里面的各个对象都是参数。  如 1
如果传入等于或超过两个对象(无论任何对象), 都会认为是新版本方法,把这些对象封装成一个数组,把这两个或多个对象当成参数。2、3、4


由此可以看出 asList()方法 原意接收的参数并不是数组,而是对象,然后把这些对象在内部加进同一集合中返回。
但由于要传入对象的个数并不清楚,也为了内部要遍历,就用一个数组来装。
其他方法的可变参数都与上面的一致

增强for循环:

for(int i=0;i<args.length;i++)----->for(int x : args)

1、迭代变量必须在( )中定义!

2、集合变量可以是数组或实现了Iterable接口的集合类


---------------------------------------------------------------

基本数据类型的自动装箱与拆箱

Integer i1 = 12;//自动装箱

System.out.println(i1+13);//自动拆箱

细节,Integer类体现了享元设计模式 flyweight

//Integer中的IntegerCache内部类创建缓存了-128-127的数组

//自动装箱调用


    public static Integer valueOf(int i) {

        if(i >= -128 && i <= IntegerCache.high)

            return IntegerCache.cache[i + 128];

        else

            return new Integer(i);

    }


Integer i2 = 12;

i1==i2;//true

Integer i3 = 128;

Integer i4 = 128;

i3==i4;//false

原创粉丝点击