2013-03-11 21 views
6

Mi sono confuso con la concatenazione di stringhe.Concatenazione di stringhe Java con operatore +

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

L'output è:

50abc20
50abc1010

mi chiedo perché 20 + 30 sono aggiunti insieme in entrambi i casi, ma 10 + 10 richiede Parenthese per essere aggiunto (s1) anziché concatenato allo String (s2). Si prega di spiegare come funziona l'operatore String + qui.

+0

Eventuali duplicati di [Dopo una stringa letterale, tutto il + sarà trattato come operatore di concatenazione di stringhe perché?] (http: // StackOverflow.it/questions/34589340/after-a-string-literal-all-the-will-be-treated-as-string-concatenation-operat) – Raedwald

risposta

10

L'addizione è lasciata associativa. Prendendo il primo caso

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 

Nel secondo caso:

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 
1

Aggiunta al concetto di associatività, si può garantire che due interi vengono mai aggiunti insieme usando parentesi per accoppiare sempre una stringa con un intero in modo che l'operazione di concatenazione desiderata abbia luogo anziché un'aggiunta.

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

produrrebbe:

2030abc1010 
0

dovrai iniziare con una stringa vuota.

Così, questo potrebbe funzionare:

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

O questo:

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

Il primo è OK, il secondo non lo fa ... – ppeterka

0

È necessario conoscere alcune regole:
1, priorità degli operatori Java, la maggior parte della sinistra a destra
2, priorità dei braccialetti rispetto alla priorità del segno +.
3, Il risultato è somma, se entrambi i lati del segno + sono interi, altrimenti è concatenazione.

+0

Grazie per il tuo prezioso contributo, mi aiuta davvero anche in altri problemi .. – shekhar

1

Inoltre, per aggiungere a questo argomento, come la parte sbagliata della risposta di Jonathan Schober me soffiata su una cosa da tenere a mente:

a+=something non è uguale a a=a+<something>: il += valuta il prima il lato destro, e solo dopo lo aggiunge al lato sinistro. Così deve essere riscritta, è equivalente a:

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

Mostrando la differenza

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); 

    } 
}