自动装箱和拆箱
首先,我们先了解一下 JAVA 的自动装箱和自动拆箱。
- 自动装箱:基本类型自动转换为包装类型。
- 自动拆箱:包装类型自动转换为基本类型。
请看下面代码:
package com.Y.web;
public class Num {
public static void main(String[] args){
int a = 5;
Integer b = Integer.valueOf(3); //自动装箱
Integer b1 = new Integer(6);
a = integer.valueOf(b1).intValue(); //自动装箱再拆箱
a = b1.intValue(); //自动拆箱
}
}
此代码 即:当把值转化为对象时为自动装箱;把对象转化为值时为制动拆箱。
128陷阱
Integer 是包装类,在 -128 到 127 之间只有固定的 256 个值,为了避免重复,事先就创造好了一个 -128 到 127 的数组,在类加载时,如果值在这个范围内,就可以直接返回预先创建好的对象了, 如果值不在这个范围,就会创建新的对象,所以新创建的对象的地址也各不相同。
请看下面代码:
package com.Y.web;
public class Num {
public static void main(String[] args){
Integer a = 100;
Integer b = 100;
Integer a1 = 1000;
Integer b1 = 1000;
System.out.println( a==b );
System.out.println( a1==b1 );
}
}
因为 == 比较的是前后两个对象的地址,所以根据上面的解释就知道输出的结果第一个为 true ,第二个为 false。
这就是128 陷阱,它可以便于程序的快速运行。(如果用 equals 进行比较时,就不会进入 128 陷阱了,因为 equals 比较的是两个值是否相等。)