装箱和拆箱
Java数据类型中的8种简单类型分别为:boolean、byte、char、short、int、long、float和double,Java类库的java.lang包中定义了8种包装(wrapper):Boolean、Byte、Character、Short、Integer、Long、Float和Double。
基本数据类型 | 包装类 | 基本数据类型 | 包装类 |
---|---|---|---|
boolean | Boolean | byte | Byte |
char | Character | short | Short |
int | Integer | long | Long |
float | Float | double | Double |
简单数据类型直接存储堆栈,可以实现高效率处理,而对应的引用类型则封装了许多方法,可以实现额外的处理功能。有时候,需要在简单类型与其对应的引用类型之间进行转换。
通过装箱(boxing)和拆箱(unboxing)操作机制,可以实现简单类型和引用类型之间的转换。
装箱转换是指将一个简单类型隐式或显式地转换成对应的包装类型。把一个简单类型的值装箱,就是创建一个对应的包装类的实例(也称为“箱子”),并将这个值复制给这个对象,装箱后对应的包装类的实例对象存储在堆中。
拆箱转换是指将一个包装类的实例对象类型转换成一个简单类型。拆箱过程一般分成两步:首先,检查这个对象实例(“箱子”),看它是否为给定的值类型的装箱值。然后,把这个对象实例的值复制给类型的变量。
装箱转换把简单类型转换为引用类型后,可以方便地调用相应对象实现的方法。值得注意的是,装箱和拆箱操作会导致额外的系统开销。
装箱和拆箱示例:
public static void main(String[] args){
int i = 123;
Integer obj1 = i; //隐式装箱(boxing)
Integer obj2 = (Integer)i; //显式装箱(boxing)
int j = obj1; //隐式拆箱(unboxing)
int k = (int)obj2; //显式拆箱(unboxing)
System.out.println("The value-type value(j) = " + j);
System.out.println("The value-type value(k) = " + k);
System.out.println("The object-type value(obj1) = " + obj1.toString());
System.out.println("The object-type value(obj2) = " + obj2.toString());
}
运行结果如下所示: