zoukankan      html  css  js  c++  java
  • java陷阱之自动拆箱

    项目中突然报空指针异常

     Integer code=null;
     code=code==null?500:code;

    排查发现三元运算符空指针异常,表面上看不出来有什么问题,编译器编译的时候会保证:2边数据类型一致如:

    String code=true?"":0;

    会编译不通过。因为String 和int不是一个类型

    按照上面的逻辑Integer是class类型并不是数值类型 编译器应该编译不通过。其实编译之后编译器后的代码是:
    ccode=code==null?500:code.initValue();
    所以这段代码才会编译通过。但是当code是null 调用initValue就会报空指针异常

    同理以下代码也会报空指针异常
     Integer code=null;
           int i=code;
    --编译之后代码
    int i=code.initValue()

    这一切的原因都是编译器自动拆箱造成的。如下情况 价格是否为null判断就好了 



  • 相关阅读:
    Android安全机制
    service不死之身
    图片加载机制比较
    handler机制面试
    SharedPreferences封装类
    文字太长自动缩小
    ANR
    onCreate源码分析
    线程池的启动策略
    Oauth认证协议
  • 原文地址:https://www.cnblogs.com/LQBlog/p/9090647.html
Copyright © 2011-2022 走看看