12.3.2 表达式中发生的自动装箱/拆箱
通常无论何时,当需要将基本类型转换为对象或者将对象转换为基本类型时,就会发生自动装箱和自动拆箱。对于表达式也是如此。在表达式中,数值对象会被自动拆箱。如果需要的话,还可以对表达式的输出进行重新装箱。例如,分析下面的程序:
输出如下所示:
|
- ++iOb;
这会导致iOb中的值递增。具体工作过程如下:将iOb自动拆箱,将值递增,然后将结果自动装箱。
自动拆箱还允许在表达式中混合不同数值类型的对象。一旦数值被拆箱,就会应用标准的类型提升和转换。例如,下面的程序是完全合法的:
- dOb after expression: 198.6
可以看出,Double对象dOb和Integer对象iOb都参与了加法运算,对结果再次装箱并存储在dOb中。
因为提供了自动拆箱特性,所以可以使用Integer数值对象控制switch语句。例如,分析下面的代码段:
当对switch表达式进行求值时,iOb被拆箱,从而得到其中存储的int型数值。
正如程序中的例子所显示的,因为提供了自动装箱/拆箱特性,在表达式中使用数值类型对象不仅很直观而且很容易。在过去,这种代码需要涉及强制类型转换,并且需要调用intValue()这类方法。