为什么以下代码的输出是9.0而不是9?如果三元运算符只是if-else分支的简短形式,那么为什么java编译器将int提升为double?
public class Ternary
{
public static void main(String args[])
{
int a = 5;
System.out.println("Value is - " + ((a < 5) ? 9.9 : 9));
}
}
Run Code Online (Sandbox Code Playgroud)
如果三元运算符只是if-else分支的简短形式,那么为什么java编译器将int提升为double?
条件表达式具有单一类型,第二个和第三个操作数都将根据需要进行转换.JLS提供了确定表达式类型的规则,由于自动取消装箱,这些规则稍微复杂一些.
条件运算符是那种只是速记的if/ else构造,但不是那种速记的我想你的预期.所以你的代码等同于:
double value;
if (a < 5) {
value = 9.9;
} else {
value = 9;
}
System.out.println("Value is - " + value);
Run Code Online (Sandbox Code Playgroud)
这不是简短的:
if (a < 5) {
System.out.println("Value is - " + 9.9);
} else {
System.out.println("Value is - " + 9);
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Java语言规范的15.25节.
因为整个表达式的类型是double,因为运算符的操作数之一是 a double。包含三元的表达式的类型由操作数决定,操作数必须具有相同的类型。对于您的表达式, 被9强制为 adouble以使其与 相同类型9.9。