装箱是将基本数据类型转换为包装类型,如int类型转换为Integer类型;拆箱是将包装类型转换为基本数据类型,如Integer类型转换为int类型。
包装类和基本数据类型的对应关系
包装类的结构
Integer类型的装箱与拆箱
Integer变量名 = new Integer(int类型数据变量); //Integer的装箱操作
int 变量 = Integer对象.intValue(); //Integer的拆箱操作
例子如下:
int x = 9;
Integer xInteger = new Integer(x); //装箱
int xTemp = xInteger.intValue(); //拆箱
Integer类型的自动装箱与拆箱
Integer 变量名 = int 类型的表达式; //Integer的自动装箱
int 变量 = Integer 对象; //Integer的自动拆箱
例子如下:
int x = 9;
Integer xInteger = x; //自动装箱
int xTemp = xInteger; //自动拆箱
JDK1.5后,Java提供自动装箱和拆箱功能,装箱和拆箱由Java自动完成而不需要人为干预,自动装箱和拆箱减轻了 编程人员负担,简化了软件设计。
下面来看个例子:
public class Sad {
public static void main(String[] args) {
Integer b = 127;
Integer a = 127;
if(a == b){ //a,b作为对象在这里并不是大小而是地址,不可以比较但JVM自动拆包将它们转换
//为基本数据类型来比较
System.out.println("相爱!");
}else {
System.out.println("相杀!");
}
}
}
运行效果如图: 如果赋值为128会出现啥情况嘞?请继续往下思考
public class Sad {
public static void main(String[] args) {
Integer b = 128;
Integer a = 128;
if(a == b){
System.out.println("相爱!");
}else {
System.out.println("相杀!");
}
}
}
运行效果如图:
结果和想象中大相径庭 !让我们来看看源码吧
从中可以看到赋值在-128~127才会放在缓存里面而超过范围的就放到了不同的地方,堆里面。所以要在-128~127之间的才可以正确判断。