条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空
如果使用三元运算符,则会出现nullpointer异常。
Integer val = null;Object res = val == null ? val : val.intValue();
但是如果没有
Integer val = null; Object res;
if( val == null ) {
res = val;
} else {
res = val.intValue();
}
谁能解释为什么?
谢谢苏达
回答:
您遇到的行为是由确定三元条件表达式的类型的规则导致的。
就您而言,表达式的类型
val == null ? val : val.intValue();是int。
这由JLS
15.25指定。:
条件表达式的类型确定如下:
如果第二个操作数和第三个操作数具有相同的类型(可能为null类型),则这是条件表达式的类型。
。
您的第二个操作数为,Integer而您的第三个操作数为int,因此表达式的类型为int。
因此,当val ==null时,val取消装箱(即val.intValue(),调用null值)并NullPointerException引发a。
如果if-else表达式val的值为null,则不会取消装箱(因为您将其分配给Object变量,所以没有)NullPointerException。
就是说,由于您要将Integer变量分配给Object变量,因此您在任一摘录中的条件都是没有意义的(因为将an分配int给Object变量只是将intbackto 装箱Integer)。
您可以简单地分配
Object res = val;并获得相同的最终结果,无一例外。
以上是 条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空 的全部内容, 来源链接: utcz.com/qa/426460.html

