Java String Concatenation with + operator

后端 未结 5 1180
深忆病人
深忆病人 2020-11-28 15:57

I got confused with the String concatenation.

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


        
相关标签:
5条回答
  • 2020-11-28 16:25

    Adding to the concept of associativity, you could ensure that two integers are never added together by using parentheses to always pair a string with an integer so the desired concatenation operation will take place rather than an addition.

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

    would produce:

    2030abc1010
    
    0 讨论(0)
  • 2020-11-28 16:29

    Also, to add to this topic, as the wrong part of the answer of Jonathan Schober tipped me off on a thing to keep in mind:

    a+=something is not equal to a=a+<something> : the += evaluates the right side first, and only then adds it to the left side. So it has to be rewritten, it is equivalent to:

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

    Showing the difference

    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);
    
      }
    }
    
    0 讨论(0)
  • 2020-11-28 16:34

    You will need to start with an empty string.

    So, this might work:

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

    Or this:

    String s2 ="";
    s2 = 20+30+"abc"+10+10;
    System.out.println(s2);
    
    0 讨论(0)
  • 2020-11-28 16:46

    You need to know some rules:
    1, Java operator priority,most of the left-to-right
    2, Brackets priority than + sign priority.
    3, The result is sum,if both sides of + sign are integer, else is concatenation.

    0 讨论(0)
  • 2020-11-28 16:52

    Addition is left associative. Taking the first case

    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
    

    In the second case:

    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
    
    0 讨论(0)
提交回复
热议问题