1,自动装箱与自动拆箱
Integer x = new Integer(4);
Integer x = 4; //自动装箱 跟上一行代码实际效果一样.而在1.5之前编译时无法通过的.
x = x+ 2; //先对x 进行自动拆箱。变成int类型。和2进行加法运算。再将和进行装箱赋给x。
2,基本数据类型的对象缓存
Integer a = 127;
Integer b = 127;
System.out.println("a==b:"+(a==b));
结果为true,为什么呢?因为对于1.5的新特性,当数值在byte范围内,如果该数值已经存在,则不会在开辟新的空间。
所以a和b指向了同一个对象.
如果写成
Integer a =new Integer( 127);
Integer b = new Integer(127);
System.out.println("a==b:"+(a==b));
则输出结果为false.
同样的,当数值超过byte范围时,例如:
Integer a = 128;
Integer b = 128;
System.out.println("a==b:"+(a==b));
输出结果为false;
如果是System.out.println(a.equals(b));则输出结果为true,因为Integer的equals方法比较的是int的值,而不是对象.
所以
Integer a =new Integer( "127");
Integer b = new Integer(127);
System.out.println("a==b:"+a.equals(b)); 结果为true.