就您而言,表达式的类型
val == null ? val : val.intValue();
是
int。
这由JLS
15.25指定。:
条件表达式的类型确定如下:
如果第二个 *** 作数和第三个 *** 作数具有相同的类型(可能为null类型),则这是条件表达式的类型。
如果第二和第三个 *** 作数中的一个是原始类型T的,并且其他的类型是施加装箱转换(§5.1.7)到T的结果,那么条件表达式的类型为T 。
您的第二个 *** 作数为,
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;
并获得相同的最终结果,无一例外。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)