Dim*_*ras 8 java core conditional-operator
你可以在下面运行并解释一下吗?
Object o = true ? new Integer(1) : new Double(2.0);
System.out.println(o);
Run Code Online (Sandbox Code Playgroud)
我发现这令人惊讶,因为有人会期望1打印而不是1.0
Roh*_*ain 17
这根本不是一个惊喜,虽然看起来像是一个.行为在JLS§15.25中指定- 条件运算符:
否则,如果第二个和第三个操作数具有可转换(第5.1.8节)到数字类型的类型,则有几种情况:
如果其中一个操作数是类型
byte或Byte另一个是类型short或Short,则条件表达式的类型是short.[...]
否则,二进制数字提升(第5.6.2节)将应用于操作数类型,条件表达式的类型是第二个和第三个操作数的提升类型.
请注意,二进制数字提升执行值集转换(第5.1.13节),并可执行拆箱转换(第5.1.8节).
所以这些Integer和Double类型都被拆箱到各自的原始对应物 - int并且double,作为二进制数字推广的过程.然后条件运算符的类型是int和的提升类型double,即double.因此结果是1.0.当然最后的结果会被重新装箱Double.
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |