您能运行下面的命令并解释一下吗?
Object o = true ? new Integer(1) : new Double(2.0);
System.out.println(o);
我发现这很令人惊讶,因为有人会期望打印 1 而不是 1.0
这一点也不奇怪,尽管它看起来像是一个。该行为在中指定JLS §15.25 - 条件运算符:
否则,如果第二个和第三个操作数的类型是
可转换(§5.1.8)为数值类型,那么有几种情况:
Note that binary numeric promotion performs value set conversion (§5.1.13) and may perform unboxing conversion (§5.1.8).
So the Integer
and Double
类型被拆箱为其各自的原始对应物 -int
and double
,作为二进制数值提升的过程。然后条件运算符的类型是提升的类型int
and double
,即double
。因此结果是1.0
。当然最后的结果会被装回Double
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)