Java 中的自动装箱/拆箱
Java 中的自动装箱和拆箱简化了原始数据类型及其相应包装类之间的类型转换。在 JDK 5.0 中引入,此功能提供了这两种表示形式的无缝集成。
自动装箱
将原始值分配给包装类变量时,会发生自动装箱。与使用包装类构造函数的假设相反,而是调用静态方法 valueOf()。这在为以下代码生成的字节码中很明显:
Integer n = 42;
0: bipush 42 2: invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: astore_1
valueOf() 方法会缓存创建的对象,确保资源效率。
自动拆箱
相反,当从包装类变量中提取原始值时,会发生自动拆箱。此过程对整数使用 intValue() 方法(以及其他类型的类似方法),如字节码所示:
int n = Integer.valueOf(42);
0: bipush 42 2: invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: invokevirtual #22 // Method java/lang/Integer.intValue:()I 8: istore_1
此方法仅返回存储在包装对象中的原始值.
总之,自动装箱/拆箱涉及使用静态方法 valueOf() 和 intValue() (或类似方法)在原始类表示形式和包装类表示形式之间透明地进行转换。这通过利用缓存机制简化了代码并提高了性能。
以上是Java 中自动装箱/拆箱如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!