三目运算符的空指针(NullPointerException)问题

2020-12-12 00:00:00 nullpointerexception 指针 运算符

空指针概念

空指针是调用一个null对象的某些方法抛出的异常

三目运算符

a>b?a:b
计算机由右往左运算,a,b的返回值类型必须一致。

自动装拆箱

自动装箱:
Integer integer = 100; == Integer integer = new Integer(100);(非自动装箱)
自动拆箱:
int i = (Integer)integer;
反编译

Integer integer = Integer.valueOf(100); 装箱
int i = Integer.intValue();  拆箱

boolean

基本数据类型的值为true和false
Boolean对象的值为Boolean.TRUE和Boolean.FALSE
booleanValue():将Boolean对象的值返回包装数据类型boolean
valueOf():将包装数据类型boolean返回Boolean对象
自动装箱:
Boolean b = 100; == Boolean b = new Boolean(true);(非自动装箱)
自动拆箱:
boolean i = (Boolean)b;
反编译

Boolean b = Boolean.valueOf(true); 装箱
boolean i = Boolean.booleanValue();  拆箱

问题及解决

问题

Map<String,Boolean> map = new HashMap<String,Boolean>();
Boolean b = (map!=null ? map.get('test') : false); 
# 最后一句代码错误

抛出空指针异常
反编译

Boolean b = Boolean.valueOf(map == null ? false : ((Boolean)map.get('test')).booleanValue());

boolean b = (Boolean)map.get(‘test’)).booleanValue()此为自动拆箱
造成的原因是三目运算符在返回值不一致的情况下即基本数据类型和包装数据类型时会对对象(包装数据类型)进行自动拆箱操作导致空指针异常;(Boolean)map.get(‘test’))对象为null,而null.booleanValue()报了NPE。

解决

Map<String,Boolean> map = new HashMap<String,Boolean>();
Boolean b = (map!=null ? map.get('test') : Boolean.FALSE); 
    原文作者:以圭为瑞 瓜祭上环
    原文地址: https://blog.csdn.net/weixin_43829548/article/details/105852448
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章