首页 >Java >java教程 >Java 中自动装箱/拆箱如何工作?

Java 中自动装箱/拆箱如何工作?

Barbara Streisand
Barbara Streisand原创
2024-11-14 12:37:02443浏览

How Does Auto Boxing/Unboxing Work in Java?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn