条件运算符(三元运算符)的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
变量只是将int
backto 装箱Integer
)。
您可以简单地分配
Object res = val;
并获得相同的最终结果,无一例外。
以上是 条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空 的全部内容, 来源链接: utcz.com/qa/426460.html