奇怪的Java行为。三元运算符

奇怪的Java行为。三元运算符,第1张

奇怪的Java行为。三元运算符

该行为在JLS-
条件运算符中
指定:

如果第二和第三个 *** 作数中的一个是原始类型T的,并且其他的类型是施加装箱转换(§5.1.7)到T的结果,则 条件表达式的类型为T

强调我的。因此,在第二种情况下:

Float f = true ? testFloat : 0f;

由于第三个 *** 作数是基本类型(

T
),因此表达式的类型将是浮点类型-
T
。因此, 取消 当前引用的 testFloat的 装箱 将导致
NPE
null``float
__


对于第一种情况,相关部分是最后一部分:

否则,第二和第三 *** 作数分别为S1和S2类型。令T1为对S1进行装箱转换所产生的类型,而T2为对S2进行装箱转换所产生的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的结果。

因此,根据此:

null type - S1float     - S2null type - T1 (boxing null type gives null type)Float     - T2 (float boxed to Float)

然后条件表达式的类型变为-

Float
。没有
null
需要的拆箱,因此没有
NPE



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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存