三元表达式空指针问题
问题描述:
如下代码标红处出现空指针异常:
测试及定位问题:
情景一:将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规范
Java规范连接
修正问题: