Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的条件if-else语句_Java_If Statement_Int_Double - Fatal编程技术网

java中的条件if-else语句

java中的条件if-else语句,java,if-statement,int,double,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 st

我无法理解下面的代码是如何打印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.0
50
的值,因此它的类型是
double

因此,即使表达式返回
50
,它也被转换为double,您可以看到
50.0

如果你改变

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


您将看到打印的
10.0
,这将明显表明返回了正确的值(在
的右侧)。

Java确保您的类型是一致的,因此在第一条语句中

(x > 10) ? 50.0 : 50
首先是double,因此表达式的返回类型是double,literal int被转换为double。因此,条件的两面是相同的

如果你把它改成

System.out.println((x > 10) ? 50.0 : 49);
它打印49.0


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

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


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

,因为它们不是等价的。有些地方有一个复制品。@sotrious,但在大多数书中,都提到第一个代码可以被认为是第二个代码的等价物one@RajMalhotra是的,它们可以被认为是等价的;但它们并不完全相同。。。这是一个用来教初学者的简化问题,但这并不是全部的真理。我不认为这个问题是重复的,尽管它们非常相似。这个问题是关于原语的;那是关于盒装数字的(更奇怪)
System.out.println((x > 10) ? 50.0 : 49);