1) 问题:
下面的代码会出现 NPE
2)原因:
从字节码中可以看出,我圈出来的位置发生了 拆箱操作 。
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
详细解释下就是:flag ? 0 : i
这行代码中,0 是基本数据类型 int,返回数据的时候 i 会被强制拆箱成 int 类型,由于 i 的值是 null,因此就抛出了 NPE 异常。
3) 解决:
采用别的写法,或者再判断下 后边的值,例如
修改为(flag || null == i) ? 0 : i; 也可以
4) 其他
== 参考文章: 推荐一款IDEA神器!一键查看Java字节码以及其他类信息 - 掘金