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