加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-05-24 05:48:04 所属栏目:编程 来源:互联网
导读:题目重现 下面通过一个简朴的示例才重现一下非常呈现的场景。 public classBoxTest{ public static voidmain(String[]args){ MapString,Objectresult=httpReques
副问题[/!--empirenews.page--]

下面通过一个简朴的示例才重现一下非常呈现的场景。

public class BoxTest { 

 

    public static void main(String[] args) { 

        Map<String,Object> result = httpRequest(); 

        long userId = (Long) result.get("userId"); 

    } 

 

    // 模仿一个HTTP哀求 

    private static Map<String,Object> httpRequest(){ 

        Map<String,Object> map = new HashMap<>(); 

        map.put("userId",null); 

        return map; 

    } 

根基的场景就是哀求一个接口,去接口中取某个值,这个值为Long范例,从Map中取得值之后,举办Long范例的强转。当接口返回的userId为null时,强转这块就抛出空指针非常:

Exception in thread "main" java.lang.NullPointerException 

 at com.choupangxia.box.BoxTest.main(BoxTest.java:15) 

上面的场景跟下面的代码呈现非常结果一样:

public class BoxTest { 

 

    public static long getValue(long value) { 

        return value; 

    } 

 

    public static void main(String[] args) { 

        Long value = null; 

        getValue(value); 

    } 

上述代码也是将Long范例进拆箱导致的非常,只不外一个在代码中,一个在参数中。为了说明更简化,我们以第二个为例举办讲授。

缘故起因说明

最初各人也许会迷惑,抛出非常的代码都没有工具的要领挪用,怎么会呈现空指针呢?

这中间首要涉及到的就是一个自动拆箱操纵。是否是拆箱导致的呢?我们来通过字节码看一下。

通过javap -c来查察一下对应的字节码:

public class com.choupangxia.box.BoxTest { 

  public com.choupangxia.box.BoxTest(); 

    Code: 

       0: aload_0 

       1: invokespecial #1                  // Method java/lang/Object."<init>":()V 

       4: return 

 

  public static long getValue(long); 

    Code: 

       0: lload_0 

       1: lreturn 

 

  public static void main(java.lang.String[]); 

    Code: 

       0: aconst_null 

       1: astore_1 

       2: aload_1 

       3: invokevirtual #2                  // Method java/lang/Long.longValue:()J 

(编辑:湖南网)

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

热点阅读