java 中的条件 if-else 语句

Conditional if-else statement in java

我无法理解下面的代码如何打印 50.0

public class Pre
{
    public static void main(String[] args)
    {
        int x=10;
        System.out.println((x > 10) ? 50.0 : 50); //output 50.0
    }
} 

它应该打印 50(我猜)而不是 50.0

上面的代码是不是等同于下面的代码?,

public class Pre
{
    public static void main(String[] args)
    {
        int x=10;
        if(x>10)
            System.out.println(50.0);
        else
            System.out.println(50);//output
    }
}

如果它们是等价的,那么为什么输出不同?

三元条件运算符的类型 - (x > 10) ? 50.0 : 50) 由第二个和第三个操作数共同确定。在你的例子中,它必须能够包含 50.050 的值,所以它的类型是 double.

因此,即使表达式 returns 50,它也被强制转换为 double,你会看到 50.0.

如果你改变

System.out.println((x > 10) ? 50.0 : 50);

System.out.println((x > 10) ? 50.0 : 10);

您会看到 10.0 被打印出来,这很明显返回了正确的值(: 的右侧)。

Java 确保你的类型是连贯的,所以在第一个语句中

(x > 10) ? 50.0 : 50

你先有一个double,所以表达式的return类型是double,将litteral int转为double。因此条件的两侧是相同的!

如果改成

System.out.println((x > 10) ? 50.0 : 49);

它打印 49.0.

if/else 不是表达式,因此不需要进行任何转换。

它打印 50.0 因为在第一种情况下你调用了 OutputStream.println(double) 方法,因为你的第一个表达式 returns 是 double 而不管你的条件如何。

但在第二种情况下,您正在调用 OutputStream.println(int) 方法。