三元运算符报空指针问题
作者:互联网
一、三元运算符与自动拆箱有关系,导致了空指针
三目运算符condition? 表达式1:表达式2中,表达式1和2在类型对齐时,可能抛出因自动拆箱导致的空指针异常
以下两种场景会触发类型对齐的拆箱操作
- 表达式1 或表达式2的值只要有一个是原始类型
- 表达式1 或表达式2的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型
错误写法:
Integer a = 1;
Integer b = 33333;
Integer c = null;
Boolean flag = false;
Integer result = (flag ? a * b : c);
log.info("{}====",result);
首先判断flag,如果为true,则计算ab值,否则计算c值,ab值是int类型,c是Integer类型,c会拆箱,null.intValue(); 此处会报空指针异常。
正确写法:
Integer a = 1;
Integer b = 33333;
Integer c = null;
Boolean flag = false;
Integer result = (flag ? Integer.valueOf(a * b) : c);
log.info("{}====",result);
二、三元运算符
对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。多级运算顺序 a?b:c?d:e将按a?b:(c?d:e)
标签:拆箱,运算符,flag,result,报空,Integer,表达式,指针 来源: https://blog.csdn.net/LYF_wait_you/article/details/116406607