从 JDK 5 开始, Java 增加了两个重要特性: 自动装箱和自动拆箱.
自动装箱时这样一个过程: 无论何时, 只需要基本类型的对象, 就是自动将基本类型自动封装(装箱)到与之等价的封装器中, 而不需要显式的构造对象.
自动拆箱是当需要时自动抽取(拆箱)已装箱对象的数值的过程. 不需要调用 intValue()
这类的方法.
有了自动装箱特性, 封装基本类型将不必再手动创建对象. 只需要将数值赋给类型封装器引用即可, Java 会自动创建对象. 例如, 下面是构造具有数值 100 的 Integer 对象的现代方式:
Integer iOb = 100;
注意没有使用 new
显式的创建对象. Java 自动处理了这个过程.
为了拆箱对象, 可以简单的将对象引用赋值给基本类型的变量. 例如, 为了拆箱 iOb, 可以使用下面这行代码:
int i = iOb;
表达式中发生的自动装箱/拆箱
通常无论何时, 当需要将基本类型转换为对象或将对象转换为基本类型时, 就会发生自动装箱和拆箱. 对于表达式也是如此. 在表达式中, 数值对象会被自动拆箱, 如果需要的话, 还可以对表达式的输出进行重新装箱.
public static void main(String[] args) {
Integer iOb = 100;
System.out.println("Original value of iOb: " + iOb);
++iOb;
System.out.println("After ++iOb: " + iOb);
}
输出如下所示:
Original value of iOb: 100
After ++iOb: 101
在这个程序中, 应特别注意下面这行代码:
++iOb;
这会导致 iOb
中的值递增. 具体工作过程如下: 将 iOb 自动拆箱, 将值递增, 然后将结果自动装箱.