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


打印出12,但以另一顺序

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


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

最佳答案

首先,这与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(加法运算符):


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

关于java - 为什么字符串加法会给出不同的答案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28948659/

10-11 10:38