【发布时间】:2017-02-19 08:18:28
【问题描述】:
在java中发现了一些奇怪的东西。
代码:
System.out.println(System.getProperty("java.version"));
System.out.println((true) ? (int)2.5 : 3.5);
System.out.println((true) ? (int)2.5 : 3);
System.out.println((true) ? (int)2.5 + "" : 3.5);
结果:
1.8.0_40 2.0 2 2这是什么?为什么只有当 false 的值不是 double 或将字符串值添加到 true 的值时才返回整数值?为什么在第二行舍入由 (int) cast 起作用,但双值返回呢?是bug吗?
【问题讨论】:
-
不,这些东西不是错误。
-
就编译器而言,整个
?:表达式只有一种类型,它通过找到双方最窄的共同类型来计算。 -
(我承认我很惊讶最后一行可以编译。)
-
@LouisWasserman 我认为它必须通过自动装箱。
-
参考规范,在链接的问题中注意this answer 相同的行为。