我正在进行java分配,我遇到了这段代码。
int x=3, y=5;
System.out.println(x + y + " = " + y + x);
,输出为“8 = 53”。为什么要评估第一个x + y并打印最后一个y和x表达式?让我疑惑。提前谢谢你们。
答案 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)
第一个+在两个数字之间,结果是八个。第二个在它们的两边都有字符串,所以数字转换为字符串并连接在一起。加号运算符绑定到左侧最紧,并从左到右进行评估。如果您希望最后一次添加是数字,那么表达式应该在括号()中。