根据Java tutorial关于自动装箱(和拆箱)
将原始值(例如int)转换为对象 相应的包装类(Integer)称为autoboxing。该 当原始值为:
时,Java编译器应用自动装箱
- 作为参数传递给期望对象的方法 相应的包装类。
- 分配给的变量 相应的包装类。
将包装类型(Integer)的对象转换为其对应的 primitive(int)值称为unboxing。 Java编译器适用 当包装类的对象是:
时取消装箱
- 作为参数传递给期望相应基元类型值的方法。
- 分配给相应基元类型的变量。
该教程进一步阐述了%
和+=
等运营商使用intValue
在运行时将Integer
转换为int
。
在原语和包装类上进行==
,>
或<
等比较时会发生什么?
例如,如果5 == Integer.valueOf(5)
5
已自动装箱并评估为Integer.valueOf == Integer.valueOf(5)
或Integer.valueOf(5)
已取消装箱并评估为5 == 5
。
在此示例中,功能结果是等效的,因为Integer
s -128
到127
被缓存,但是对于更大的数字呢?
在较大数字上运行此算法的经验测试表明Integer
对象未拆箱且比较使用原始值。是否有专门定义此行为的官方文档?