Ale*_*der 23 java autoboxing nullpointerexception
运行以下Java代码:
boolean b = false;
Double d1 = 0d;
Double d2 = null;
Double d = b ? d1.doubleValue() : d2;
Run Code Online (Sandbox Code Playgroud)
为什么会出现NullPointerException?
Jus*_*ini 35
条件表达式的返回类型b ? d1.doubleValue : d2是double.条件表达式必须具有单个返回类型.遵循二进制数字促销的规则,自动d2装箱到a double,这会导致NullPointerException时间d2 == null.
从语言规范,第15.25节:
否则,如果第二个和第三个操作数具有可转换的类型(第5.1.8节)到数字类型,那么有几种情况:...
否则,二进制数字提升(第5.6.2节)将应用于操作数类型,条件表达式的类型是第二个和第三个操作数的提升类型.请注意,二进制数字促销执行拆箱转换(第5.1.8节)和值集转换(第5.1.13节).
Aar*_*lla 15
因为周围的两个表达式:必须返回相同的类型.这意味着Java尝试将表达式转换d2为double.这意味着字节码调用doubleValue()上d2- > NPE.
| 归档时间: |
|
| 查看次数: |
6343 次 |
| 最近记录: |