加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java中基础类型的包装类在拆箱和装箱过程中起到了什么用处

发布时间:2021-05-23 18:17:04 所属栏目:语言 来源:互联网
导读:问题重现 下面通过一个简单的示例才重现一下异常出现的场景。 public classBoxTest{ public static voidmain(String[]args){ MapString,Objectresult=httpReques

       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 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!