2013-03-11 18 views
6

Myliłem się z konkatenacją String.Java String Concatenation with + operator

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

Wyjście jest:

50abc20
50abc1010

Zastanawiam się dlaczego 20 + 30 są sumowane w obu przypadkach, ale 10 + 10 wymagają Parenthese w celu dodania (s1) zamiast konkatenacji do ciągu (s2). Proszę wyjaśnić, jak działa operator String +.

+0

Możliwy duplikat [Po sznurku dosłownym, wszystkie + będą traktowane jako operator konkatenacji dlaczego?] (http: // stackoverflow.com/questions/34589340/after-a-string-literal-all-the-will-be-traktowany jako ciąg-konkatenacja-operat) – Raedwald

Odpowiedz

10

Dodawanie pozostaje asocjacyjne. Biorąc pierwszy przypadek

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 

W drugim przypadku:

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

Dodawanie do koncepcji skojarzeń, można zapewnić, że dwie liczby nie są sumowane za pomocą nawiasów zawsze powiązać ciąg z integer, więc pożądana operacja łączenia będzie miała miejsce zamiast dodawania.

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

przyniosłoby:

2030abc1010 
0

Trzeba będzie rozpocząć z pustym ciągiem.

Tak, to może działać:

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

albo to:

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

Pierwszy jest OK, drugi nie robi tego ... – ppeterka

0

trzeba znać kilka zasad:
1, pierwszeństwo operator Java, większość z lewej do prawej
2, Priorytety wsporników niż + priorytet znak.
3, Wynik jest sumą, jeśli obie strony + są liczbą całkowitą, w przeciwnym razie jest to konkatenacja.

+0

Dziękuję za cenny wkład, to naprawdę pomaga mi również w innych problemach .. – shekhar

1

Ponadto, aby dodać do tego tematu, jak złym część odpowiedzi Jonathan Schober poradzili mi na rzeczy o których warto pamiętać:

a+=something nie jest równa a=a+<something>: the += ocenia po prawej stronie, a dopiero potem dodaje ją po lewej stronie. Więc to musi być zapisane, jest równoznaczne z:

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

Pokazuje różnicę

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

    } 
}