12.3 自动装箱
从JDK 5开始,Java增加了两个重要特性:自动装箱和自动拆箱。自动装箱是这样一个过程:无论何时,只要需要基本类型的对象,就自动将基本类型自动封装(装箱)到与之等价的类型封装器中,而不需要显式地构造对象。自动拆箱是当需要时自动抽取(拆箱)已装箱对象的数值的过程。不需要调用intValue()或doubleValue()这类方法。 自动装箱和自动拆箱特性极大地简化了一些算法的编码,移除了单调乏味的手动装箱和拆箱数值操作。它们还有助于防止错误发生。此外,它们对于泛型非常重要,因为泛型只能操作对象。最后,集合框架(将在本书第Ⅱ部分介绍)需要利用自动装箱特性进行工作。
有了自动装箱特性,封装基本类型将不必再手动创建对象。只需要将数值赋给类型封装器引用即可,Java会自动创建对象。例如,下面是构造具有数值100的Integer对象的现代方式:
- Integer iOb = 100; // autobox an int
注意没有使用new显式地创建对象。Java自动处理了这个过程。
为了拆箱对象,可以简单地将对象引用赋值给基本类型的变量。例如,为了拆箱iOb,可以使用下面这行代码:
- int i = iOb; // auto-unbox
Java处理了这一个过程中的细节。
下面的程序对前面的程序进行了改写,以使用自动装箱和自动拆箱特性: