三元运算符

Pra*_*mar 6 java ternary

为什么以下代码的输出是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)

Jon*_*eet 9

如果三元运算符只是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节.

  • @PraveenKumar:在这种情况下,表达式的类型只是`Object`,而`int`被装箱为`Integer`.基本上,在每种情况下都遵循第15.25节的规定...... (2认同)

T.J*_*der 1

因为整个表达式的类型是double,因为运算符的操作数之一是 a double。包含三元的表达式的类型由操作数决定,操作数必须具有相同的类型。对于您的表达式, 被9强制为 adouble以使其与 相同类型9.9