下面用一组图来说明java中字符串的不变性。
String s = "abcd";
s存储着这个字符串对象的引用,下面图中的箭头应该被理解为“存储……的引用”。
2.将一个字符串变量赋值给另一个字符串变量
String s2 = s;
s2和s存储相同的引用值,因为这里是同一个字符串对象。
3.字符串连接
s2 = s2.concat("ef");
现在,s2存储一个新创建的字符串对象的引用。
总结
一旦在内存(堆)中创建一个字符串,它就不能被改变。我们应该注意,所有用在String上的方法,并不改变字符串本身,而是返回一个新的字符串。
如果需要一个可以被修改的字符串,我们将会使用StringBuffer和StringBuilder,否则每次都会创建一个新的字符串,将会浪费大量时间用于垃圾回收。这里是一个StringBuilder的用法。