三元表达式空指针问题

三元表达式空指针问题

问题描述:

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

测试及定位问题:

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

修正问题:

经验分享 程序员 微信小程序 职场和发展