首页 >Java >java教程 >自动装箱和拆箱在 Java 中是如何工作的?

自动装箱和拆箱在 Java 中是如何工作的?

Linda Hamilton
Linda Hamilton原创
2024-11-19 19:11:03734浏览

How Do Auto Boxing and Unboxing Really Work in Java?

Java 中的自动装箱和拆箱:揭开隐藏机制

Java JDK 5.0 中引入的自动装箱和拆箱,简化了之间的转换原始类型及其相应的包装类。然而,这些概念的确切工作原理可能令人困惑。

自动装箱:多面包装器

最初,自动装箱似乎仅依赖于实现的构造函数在包装类中。然而,深入研究 Integer.class 的字节码会发现不同的情况。

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