这里有一组图表阐述了java String 对象的 不变性。

  1. String 的声明
    1
    String s = "abcd";

s 储存着String对象的引用,下面的箭头应该解释为”内存的引用”

  1. 用一个String变量给另一个String变量赋值
    1
    String s2 = s;

因为是同样的对象,所以s2存储的是同样的内存引用

  1. 字符串的连接
    1
    s = s.contact("abc");

s现在存储的是重新被创造出来的对象引用。

总结:

一旦String对象在内存(heap区) 中被创建了。它就不能改变,
所以我们应该注意,一旦有String的方法想改变String.
我们还不如重新创造一个String对象。

如果我们需要创建可变的String对象。 我们可以使用 StringBuffer 或者 StringBuilder. 否则,很多时间可能被浪费在垃圾回收上。因为每一次都会有一个新的对象产生。

延伸阅读:

StringBuilder
jvm内存