条件运算符(三元运算符)的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分配intObject变量只是将intbackto 装箱Integer)。

您可以简单地分配

Object res = val;

并获得相同的最终结果,无一例外。

以上是 条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空 的全部内容, 来源链接: utcz.com/qa/426460.html

回到顶部