Java中基础类型的包装类在拆箱和装箱过程中起到了什么用处
6: invokestatic #3 // Method getValue:(J)J 9: pop2 10: return } 其中getValue方法调用对应的是main方法中编号3和6的操作。编号3为命令invokevirtual为方法指令。对应的便是value.longValue,value对应的就是声明的Long类型。 也就是说编译器将getValue(value)拆分成了两步,第一步将通过value的longValue方法将其拆箱,然后再将拆箱之后的结果传递给方法。相当于: long primitive = value.longValue(); test(promitive); 对照最开始的代码,如果value为null的话,那么在调用longValue方法时便会抛出NullPointerException。 所以,本质上来讲,所谓的自动拆箱和装箱只不过是Java提供的语法糖而已。 再次证实 下面用int类型的实例同时证实一下自动拆箱和自动装箱两个操作语法糖底层到底是怎么运行的: public class IntBoxTest {
public static void main(String[] args) { Integer index = 11; int primitive = index; } } 同样查看上面代码的字节码: public class com.choupangxia.box.IntBoxTest { public com.choupangxia.box.IntBoxTest(); Code: 0: aload_0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |