三元表达式空指针问题

三元表达式空指针问题

 

问题描述:

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

测试及定位问题:

情景一:将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

 

修正问题:

 

 

 


版权声明:本文为erlian1992原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。