26 August 2015

本篇文章用一组图表来说明Java的String不变性。

声明一个字符串

String s = "abcd";

变量s储存字符串对象的引用,下面的箭头应该解释为‘字符串变量s储存字符串'abcd'的引用’。

pic1

把一个字符变量复制给另一个字符变量

String s2 = s;

S2也储存同样的引用,因为引用了同样的字符串对象。

pic2

拼接字符串

s = s.concat("ef");

s现在储存新建字符串对象的引用。

pic3

总结

一旦字符串对象在内存(堆)中被创建,就不能再被改变。所有字符串方法都不能改变字符串对象,但是可以返回一个新建的字符串对象。

如果你需要一个可以被修改的字符串,则需要使用StringBuffer或者StringBuilder。否则,将会大量的时间浪费在垃圾回收上(Garbage Collection),因为每次都会创建一个新的String对象在内存上。



blog comments powered by Disqus