java中的条件if-else语句

时间:2015-07-06 15:00:55

标签: java if-statement int double

我无法理解以下代码如何打印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
    }
}

如果它们是等价的,那么为什么输出的差异呢?

3 个答案:

答案 0 :(得分:9)

Java确保您的类型是连贯的,因此在第一个语句中

(x > 10) ? 50.0 : 50

你有一个双重优先,所以表达式的返回类型是double,而litteral int则转换为double。因此,条件的两边是相同的!

如果您将其更改为

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

打印49.0。

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

答案 1 :(得分:6)

它打印50.0因为在第一种情况下你调用了OutputStream.println(double)方法,因为无论你的情况如何,你的第一个表达式都会返回double

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

答案 2 :(得分:5)

三元条件运算符的类型 - (x > 10) ? 50.0 : 50)由第二个和第三个操作数确定。在您的情况下,它必须能够包含50.050的值,因此其类型为double

因此,即使表达式返回50,它也会被转换为加倍,并且您会看到50.0

如果你改变了

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

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

您会看到10.0已打印,这样可以明显返回正确的值(:的右侧)。