为什么字符串加法给出不同的答案?
Why do string additions give different answers?
System.out.println(7 + 5 + " ");
这会打印出 12
,但顺序不同
System.out.println(" " + 5 + 7);
它打印出 57
。这是为什么?
简单。 System.out.println(7 + 5 + " ") 被视为一个数学方程式,而 System.out.println(" " + 5 + 7) 而事先有 space,Java (我假设)将其视为字符串。于是'concatenating'两个。
首先,这与System.out.println
无关。如果您使用:
,您会看到完全相同的效果
String x = 7 + 5 + "";
String y = " " + 5 + 7;
它与关联性 有着千丝万缕的关系。 +
运算符是左结合的,所以上面两个语句等价于:
String x = (7 + 5) + "";
String y = (" " + 5) + 7;
现在看看每种情况下第一个表达式的结果:7 + 5
只是 12,因为 int
... 而 " " + 5
是“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(加法运算符):
The additive operators have the same precedence and are syntactically left-associative (they group left-to-right).
System.out.println(7 + 5 + " ");
这会打印出 12
,但顺序不同
System.out.println(" " + 5 + 7);
它打印出 57
。这是为什么?
简单。 System.out.println(7 + 5 + " ") 被视为一个数学方程式,而 System.out.println(" " + 5 + 7) 而事先有 space,Java (我假设)将其视为字符串。于是'concatenating'两个。
首先,这与System.out.println
无关。如果您使用:
String x = 7 + 5 + "";
String y = " " + 5 + 7;
它与关联性 有着千丝万缕的关系。 +
运算符是左结合的,所以上面两个语句等价于:
String x = (7 + 5) + "";
String y = (" " + 5) + 7;
现在看看每种情况下第一个表达式的结果:7 + 5
只是 12,因为 int
... 而 " " + 5
是“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(加法运算符):
The additive operators have the same precedence and are syntactically left-associative (they group left-to-right).