栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

条件运算符(三元运算符)的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;

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号