2015-06-28 34 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 –