运行以下 Java 代码:
boolean b = false;
Double d1 = 0d;
Double d2 = null;
Double d = b ? d1.doubleValue() : d2;
为什么会出现空指针异常?
条件表达式的返回类型b ? d1.doubleValue : d2
is double
。条件表达式必须具有单一返回类型。遵循二进制数字提升的规则,d2
自动拆箱为double
,这会导致NullPointerException
when d2 == null
.
根据语言规范第 §15.25 节:
否则,如果第二个和第三个
操作数的类型是
可转换(第 5.1.8 节)为数字类型,
那么有几种情况:...
否则,应用二进制数字提升(第 5.6.2 节)
操作数类型和类型
条件表达式是
第二种和第三种提升型
操作数。请注意,二进制数字
促销执行拆箱转化
(§5.1.8) 和值集转换
(第 5.1.13 节)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)