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

为什么三元运算会给nullpointer而ifelse却没有呢?[重复]

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

为什么三元运算会给nullpointer而ifelse却没有呢?[重复]

这是该规范的相关报价(第15.25.2节):

布尔条件表达式是独立表达式(第15.2节)。

布尔条件表达式的类型确定如下:

  • 如果第二和第三操作数均为type

    Boolean
    ,则条件表达式的类型为
    Boolean

  • 否则,条件表达式的类型为

    boolean

因此,整个表达式的类型被认为是

boolean
,并且该
Boolean
值被自动取消装箱,从而导致
NullPointerException


如评论中所述,以下内容为何不引发异常?

return val == null ? null : "true".equalsIgnoreCase(val);

好吧,以上摘自规范的摘要仅适用于
布尔条件表达式,在
此指定(第15.25节):

如果第二和第三操作数表达式都是 布尔表达式 ,则条件表达式是布尔条件表达式。

为了对条件进行分类,以下表达式是布尔表达式:

*类型为或的独立形式(第15.2节)的表达式。

boolean``Boolean

*带括号的

boolean
表达式(第15.8.5节)。

*类的类实例创建表达式(§15.9)

Boolean

*方法调用表达式(第15.12节),为其选择的最特定方法(第15.12.2.5节)具有返回类型

boolean
Boolean

(请注意,对于泛型方法,这是实例化方法的类型参数之前的类型。)

  • boolean
    条件表达式。

由于

null
不是 布尔表达式 ,因此整体条件表达式不是 布尔条件表达式。参见表15.2(在同一部分后面),我们可以看到这样的表达式被认为具有
Boolean
类型,因此不会发生拆箱,也不会引发异常。



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

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

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