【问题标题】:Conditional if-else statement in java [duplicate]java中的条件if-else语句[重复]
【发布时间】:2015-07-06 15:00:54
【问题描述】:

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

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

【问题讨论】:

  • 因为它们不等价。哪里有骗子。
  • @Sotirious-但是在大多数书籍中,都提到第一个代码可以认为是第二个代码
  • @RajMalhotra 是的,它们可以被认为是等价的;但它们并不相同......这是一种用于教初学者的简化,但并不是全部。
  • 我不认为这个问题与Why does the ternary operator unexpectedly cast integers? 重复,尽管它们非常相似。这个问题是关于原语的;那个是关于盒装数字的(这更奇怪)

标签: java if-statement int double


【解决方案1】:

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

(x > 10) ? 50.0 : 50

你首先有一个双精度,所以表达式的返回类型是双精度,而字面量 int 被转换为双精度。因此条件的两边是相同的!

如果你改成

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

打印 49.0。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果你改变了

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-11-21
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 2015-12-24
        相关资源
        最近更新 更多