泛型:
是JDK1.5的新特性。在之前使用集合的时候,装入集合的各种类型的对象都被当做Object对待。失去了自己的类型,而从集合中取出对象的时候需要进行类型转换,效率低下且容易出错。
TreeMap<String, Integer> rm = new TreeMap<>();
//装入集合的元素必须是String和Integer类型的,不然编译器会报错的
装箱、拆箱:
也是JDK1.5的新特性之一。自动拆箱、装箱,其目的是为了方便基本数据类型和其对应的包装类型之前的转换。可以直接把一个基本数据类型的值赋给其包装类型(装箱),反之亦然(拆箱),中间过程由编译器自动完成。
编译器也只是对这个过程做了简单的处理,通过包装类的valueOf()方法对基本数据类型进行包装,通过包装类的类似intValue()方法得到其基本数据类型。
public static void main(String[] args) {
Integer t1 = 45; //会自动进行装箱,使用valueOf()方法
Integer t2 = 45;
System.out.println(t1==t2); //true
t1 = 323;
t2 = 323;
System.out.println(t1==t2); //false
System.out.println(t1.equals(t2)); //true
/*
* 出现上面的结果,因为valueOf方法对部分经常使用的数据采用缓存技术,
* 也就是在未使用的使用,这些对象就创建并缓存着,需要的使用不需要新创建该对象,直接获取即可,提高性能。
* 例如:Byte,Integer和Long这些包装类都缓存了数值在-128~+127之间的对象,
* 自动装箱的时候,如果对象值在这个范围内,则直接返回缓存的对象,只有在没有的时候再去创建一个
* 所以,第一次为true,第二次为fasle
*/
}