1
System.out.println(7 + 5 + " ");

这会打印出来12,但顺序不同

System.out.println(" " + 5 + 7);

它打印出来57。为什么是这样?

4

2 回答 2

3

首先,这与System.out.println. 如果你使用,你会看到完全相同的效果:

String x = 7 + 5 + "";
String y = " " + 5 + 7;

它与关联性有关。运算符是左结合的+,所以上面两条语句等价于:

String x = (7 + 5) + "";
String y = (" " + 5) + 7;

现在查看每种情况下第一个表达式的结果:7 + 5is just 12, as int... 而" " + 5is "5"(字符串)。

或者进一步分解:

int x1 = 7 + 5;      // 12   (integer addition)
String x = x1 + "";  // "12" (conversion to string, then string concatenation)

String y1 = " " + 5; // "5"  (conversion to string, then string concatenation)
String y = y1 + 7;   // "57" (conversion to string, then string concatenation)

理由:JLS 15.18(加法运算符):

加法运算符具有相同的优先级并且在语法上是左结合的(它们从左到右分组)。

于 2015-03-09T17:57:46.850 回答
0

简单的。System.out.println(7 + 5 + " ") 被视为一个数学方程式,而 System.out.println(" " + 5 + 7) 事先有空间,Java(我假设)将其视为一个字符串。从而将两者“连接”起来。

于 2015-03-09T17:57:39.407 回答