这里有一组图来说明 Java 字符串的不可变性.
1. 声明一个字符串
下面的代码初始化一个字符串 s.
变量 s 存储字符串对象的引用, 如下所示.
箭头可以解释为 "store reference of".
2. 将一个字符串变量分配给另一个字符串变量
下面的代码将 s 分配给 s2.
s2 存储相同的引用值, 因为它是相同的字符串对象.
3.Concat 字符串
当我们将字符串 ef 连接到 s 时,
s 存储新创建的字符串对象的引用, 如下所示.
摘要
总之, 一旦在内存 (堆) 中创建了字符串, 就不能更改它.
String 的所有方法都不会更改字符串本身, 而是返回一个新字符串.
如果我们需要一个可以修改的字符串, 我们将需要 StringBuffer 或 StringBuilder.
否则, 由于每次创建一个新字符串, 就会在垃圾收集上浪费大量时间.
下面是一个使用 StringBuilder 的例子.
最后, 想学习 Java 的小伙伴们!
关注 "速学 java" 公众号就可以拿到一份我为大家准备的 Java 学习资料!
对 Java 感兴趣的小伙伴也可以加 小编 V: suxuejava
来源: http://www.jianshu.com/p/bce0a715ca08