2015-06-28 36 views
2
String s1 = "Sk"; 
s1.concat(" Y"); 
System.out.println("s1 refers to "+s1); 

上述代碼生成輸出「Sk」而不是「Sk Y」。我希望我能夠解釋清楚。爲什麼?'concat'爲什麼不改變String?

+1

CONCAT不會改變字符串,Java字符串是不可變的。嘗試s1 = s1.concat(「Y」)。 – pete23

回答

3

s1.concat(" Y");不會改變s1(它不能,因爲字符串是不可變的)。

它返回一個新字符串:

String s2 = s1.concat(" Y"); 
System.out.println("s2 refers to "+s2); 
+0

你能解釋更多細節immutable嗎或指定一個鏈接? –

+0

@Shashwat沒有太多解釋。不可變的對象意味着你不能在創建它之後改變它的狀態。當你寫'String s1 =「Sk」;'時,'s1'指向一個不可變的對象,所以你在's1'上調用的任何方法都不會改變那個String的內容。另一方面,StringBuilder是一個可變對象。調用StringBuilder對象的'append'方法會改變該對象的內容。 – Eran

+0

http://stackoverflow.com/questions/279507/what-is-meant-by-immutable –