6

我对字符串连接感到困惑。

String s1 = 20 + 30 + "abc" + (10 + 10);
String s2 = 20 + 30 + "abc" + 10 + 10;
System.out.println(s1);
System.out.println(s2);

输出是:

50abc20
50abc1010

我想知道为什么在两种情况下都将20 + 30加在一起,但是10 + 10需要括号才能添加(s1)而不是连接到字符串(s2)。请在此处解释 String 运算符的+工作原理。

4

5 回答 5

10

加法是左结合的。接第一个案例

20+30+"abc"+(10+10)
-----       -------
  50 +"abc"+  20    <--- here both operands are integers with the + operator, which is addition
  ---------
  "50abc"  +  20    <--- + operator on integer and string results in concatenation
    ------------
      "50abc20"     <--- + operator on integer and string results in concatenation

在第二种情况下:

20+30+"abc"+10+10
-----
  50 +"abc"+10+10  <--- here both operands are integers with the + operator, which is addition
  ---------
   "50abc"  +10+10  <--- + operator on integer and string results in concatenation
    ----------
    "50abc10"  +10  <--- + operator on integer and string results in concatenation
     ------------
      "50abc1010"   <--- + operator on integer and string results in concatenation
于 2013-03-11T13:53:08.430 回答
1

添加关联性的概念,您可以确保两个整数永远不会加在一起,方法是使用括号始终将字符串与整数配对,以便进行所需的连接操作而不是加法。

String s4 = ((20 + (30 + "abc")) + 10)+10;

会产生:

2030abc1010
于 2013-03-11T13:59:12.550 回答
1

另外,为了补充这个话题,乔纳森·肖伯的答案的错误部分提示了我要记住的一件事:

a+=something不等于a=a+<something>+=首先计算右侧,然后才将其添加到左侧。所以不得不重写,相当于:

a=a+(something); //notice the parentheses!

显示差异

public class StringTest {
  public static void main(String... args){
    String a = "";
    a+=10+10+10;

    String b = ""+10+10+10;

    System.out.println("First string, with += : " + a);
    System.out.println("Second string, with simple =\"\" " + b);

  }
}
于 2013-03-12T09:34:33.140 回答
0

您需要从一个空字符串开始。

所以,这可能有效:

String s2 = ""+20+30+"abc"+10+10; 

或这个:

String s2 ="";
s2 = 20+30+"abc"+10+10;
System.out.println(s2);
于 2013-03-11T14:02:05.217 回答
0

你需要知道一些规则:
1、Java 运算符优先级,大部分从左到右
2、括号优先级高于+号优先级。3、结果为和,如果+
号 两边 都是整数,否则为连接。

于 2013-03-12T09:20:35.577 回答