三元表达式空指针问题

Posted life is wonderful

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三元表达式空指针问题相关的知识,希望对你有一定的参考价值。

三元表达式空指针问题

 

问题描述:

如下代码标红处出现空指针异常:

测试及定位问题:

情景一:将num赋值为20,将flag赋值为true

正常输出10

情景二:将num赋值为null,将flag赋值为true

此时可以看到编译器给出的警告提示,num处会发生拆箱操作,但是结果依然运行正常,因为三元表达式在条件为true短路则不会执行到num处。

情景三:将num赋值为null,将flag赋值为false

此时可以看到编译器给出的警告提示,num处会发生拆箱操作,执行程序发生空指针异常,因为三元表达式在条件为false时执行到num处进行拆箱操作,也就是Integer的intValue()方法。

情景四:将num赋值为null,将flag赋值为true,num和10调换位置

此时可以看到编译器给出的警告提示,num处会发生拆箱操作,执行程序发生空指针异常,因为三元表达式在条件为true时执行到num处进行拆箱操作,也就是Integer的intValue()方法。

情景五:将flag赋值为true

正常输出null

 

综上来看,三元表达式中条件判断后,如果两个结果中不直接写null且同时存在基本类型和包装类型的情况下,会发生自动装箱或自动拆箱操作,比如情景三和情景四,因此出现这种代码最好使用包装类。

 

Java规范

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25

 

修正问题:

 

 

 

以上是关于三元表达式空指针问题的主要内容,如果未能解决你的问题,请参考以下文章

三元表达式空指针问题

三元表达式空指针问题

三元堆空指针异常

三元表达式执行顺序

记录一个Java三元表达式中的陷阱

右侧的三元/空合并运算符和赋值表达式?