一.装箱拆箱的定义
众所周知,Java中有8大基本数据类型,其为每种基本数据类型都提供了对应的包装器类型。 下表是基本数据类型对应的包装器类型:
在Java SE5之前,如果要生成一个数值为5的Integer对象,必须这样进行:
Integer i = new Integer(5);
而从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为5的Integer对象,只需要这样就可以了:
Integer i = 5;
这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。
那什么是拆箱呢?顾名思义,与装箱对应,拆箱就是自动将包装器类型转换为基本数据类型:
Integer i = 5; //装箱
int n = i; //拆箱
因此可以用一句话总结装箱和拆箱的实现过程:
装箱过程是通过调用包装器的valueOf( )方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
三. 典型实例
虽然大多数人对装箱和拆箱的概念都清楚,但是却没有真正掌握其底层原理。下面通过一些常见的装箱/拆箱有关的问题来加深理解。
1.下面这段代码的输出结果是什么?
public class Main {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
true
false