2013-03-11 44 views
6

Tôi đã nhầm lẫn với chuỗi nối.Ghép nối chuỗi Java với + toán tử

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

Đầu ra là:

50abc20
50abc1010

Tôi tự hỏi tại sao 20 + 30 được thêm vào với nhau trong cả hai trường hợp, nhưng 10 + 10 đòi hỏi parenthese để được thêm (s1) thay vì ghép vào chuỗi (s2). Vui lòng giải thích cách toán tử Chuỗi + hoạt động ở đây.

+0

có thể trùng lặp của [Sau một chuỗi chữ, tất cả các + sẽ được coi như nhà điều hành chuỗi nối tại sao?] (http: // stackoverflow.com/questions/34589340/after-a-string-literal-all-the-sẽ-được-coi-như-chuỗi-nối-operat) – Raedwald

Trả lời

10

Bổ sung là liên kết trái. Lấy trường hợp đầu tiên

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 

Trong trường hợp thứ hai:

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

Thêm vào các khái niệm về associativity, bạn có thể đảm bảo rằng hai số nguyên không bao giờ được vào với nhau bằng cách sử dụng dấu ngoặc đơn để luôn ghép một chuỗi với một số nguyên sao cho thao tác ghép nối mong muốn sẽ diễn ra hơn là bổ sung.

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

sẽ tạo ra:

2030abc1010 
0

Bạn sẽ cần phải bắt đầu với một chuỗi rỗng.

Vì vậy, điều này có thể làm việc:

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

Hoặc này:

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

Cái đầu tiên là OK, cái thứ hai không làm điều đó ... – ppeterka

0

Bạn cần phải biết một số quy tắc:
1, ưu tiên điều hành Java, hầu hết các trái sang phải
2, Chân đế ưu tiên hơn + ưu tiên ký.
3, Kết quả là tổng, nếu cả hai bên của + ký là số nguyên, khác là nối.

+0

Cảm ơn bạn đã đầu tư có giá trị của bạn, nó thực sự giúp tôi trong các vấn đề khác cũng .. – shekhar

1

Ngoài ra, để thêm vào chủ đề này, như là một phần sai của câu trả lời của Jonathan Schober tipped tôi ra về một điều cần lưu ý:

a+=something không bằng a=a+<something>: các += đánh giá bên phải đầu tiên, và chỉ sau đó thêm nó vào phía bên trái. Vì vậy, nó phải được viết lại, nó tương đương với:

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

Hiển thị sự khác biệt

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

    } 
} 
Các vấn đề liên quan