关于三元运算符
在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下:
1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,,那么返回的结果就是范围大 (精度高)类型
2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型
3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型
这里涉及到三元运算符,以及自动拆包,妥妥的暗坑多亏了idea的强大才发现
代码如下
public class m2 {
public static void main(String[] args) {
Integer num = (int) (10 * Math.random());
Integer status1 = num == 11 ? 1 : null; // 通过
Integer status2 = num == 12 ? Integer.valueOf(2) : num == 13 ? 3 : null; // 通过
Integer status3 = num == 14 ? 1
: num == 13 ? 3
: num == 12 ? 2
: null; // 报错
// null的地方底层应该进行了这样的逻辑运算导致报错
Integer A = null;
int a = A.intValue(); // 这里报错
}
}
idea提醒如下 Unboxing of ‘null’ may produce ‘NullPointerException’
运行报错如下
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" at m2.main(m2.java:11)