为什么字符串添加会给出不同的答案?

时间:2015-03-09 17:54:41

标签: java string associativity

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

这会打印出12,但会按照其他顺序打印

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

打印出57。这是为什么?

2 个答案:

答案 0 :(得分:3)

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

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

它与 associativity 有关。 +运算符是左关联的,因此上述两个语句相当于:

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

现在看看每种情况下第一个表达式的结果:7 + 5只有12,int ...而" " + 5是“5”(字符串)。< / p>

或者进一步分解:

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(加法运算符):

  

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

答案 1 :(得分:0)

易。 System.out.println(7 + 5 +“”)被视为一个数学方程,而System.out.println(“”+ 5 + 7)虽然事先有空间,但Java(我假设)将其视为一个字符串。因此“连接”两者。