条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空

条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空,第1张

条件运算符(三元运算符)的Nullpointer异常,如果不是,则为空

您遇到的行为是由确定三元条件表达式类型的规则导致的。

就您而言,表达式的类型

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
变量只是将
int
backto 装箱
Integer
)。

您可以简单地分配

Object res = val;

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5020779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存