添加的Java神秘输出:一些评估,一些打印

时间:2014-10-01 02:03:05

标签: java println

我正在进行java分配,我遇到了这段代码。

int x=3, y=5;
System.out.println(x + y + " = " + y + x);

,输出为“8 = 53”。为什么要评估第一个x + y并打印最后一个y和x表达式?让我疑惑。提前谢谢你们。

5 个答案:

答案 0 :(得分:6)

请记住,在Java中,运算符(如+)可能重载。这意味着它将根据其操作数执行不同的操作。对于+,有(至少)两种选择:整数加法字符串连接

选择哪个重载更多地取决于左侧操作数。此外,使用非字符串操作数进行字符串连接可能会导致自动转换为字符串。

整个事情将从左到右进行评估:

x + y + " = " + y + x

3 + 5 + " = " + 3 + 5     // 3+5 chooses the integer addition overload of +

8 + " = " + 3 + 5         // 8 + " = " chooses string concatenation
"8" + " = " + 3 + 5       // so 8 is converted to "8" first
"8 = " + 3 + 5            // and then concatenated with " = "

"8 = " + "3" + 5          // now 3 is converted to "3"
"8 = 3" + 5               // and concatenated with "8 ="

"8 = 3" + "5"             // finally 5 is converted to "5"
"8 = 35"                  // and concatenated with the rest

FWIW,这样的含糊不清使我不喜欢隐含的转换 1

1 - 在C#中。我喜欢Python: - )

答案 1 :(得分:5)

  

输出为“8 = 53”。为什么第一个x + y被评估,最后一个被评估   y和x表达式被打印?

因为第一个x + y没有附加字符串所以完成整数计算。由于" = " +,第二个被附加到字符串,因此它们被打印为单独的值。

要证明这一点:

    System.out.println("" + x + y + " = " + x + y);

,输出结果为:

  

35 = 35

答案 2 :(得分:2)

第一部分被解释为整数加法,但在第二部分(因为你已经引入了一个字符串),它将被解释和字符串连接。

假设您需要8 = 8

System.out.println(x + y + " = " + (y + x));

如果您需要3 + 5 = 5 + 3

然后我会使用String.format作为  在

 System.out.println (String.format ("%d + %d = %d + %d", x, y, y, x));

答案 3 :(得分:2)

输出的原因是" 8 = 53"是因为:

x + y + " = " + y + x

从左到右计算,如果我们一块一块地分解:

x + y = 8

8 + " = " = "8 = "

"8 = " + y = "8 = 5"

"8 = 5" + x = "8 = 53"

这就是编译器得到答案的方式:)

答案 4 :(得分:1)

第一个+在两个数字之间,结果是八个。第二个在它们的两边都有字符串,所以数字转换为字符串并连接在一起。加号运算符绑定到左侧最紧,并从左到右进行评估。如果您希望最后一次添加是数字,那么表达式应该在括号()中。