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