1.String的不可变性
String s=“abcd”;
上面的语句定义了一个字符串变量s,该变量指向字符串“abcd”,当初始化变量s时,会在堆中为s非配内容空间,如下图所示:

当将字符串变量,赋值给另一个字符串变量时,例如:String s2=s;
此时,s2和s是相同的字符串对象,如下图所示:

当一个字符串连接其他字符时,他就指向了新的字符串对象,例如,s=s.concat("ef“), 如下图所示

当一个字符串在堆中被分配内容时,它就是不可变的,任何String的方法都无法改变字符串本身,但它可以返回一个新的字符串对象。
如果需要可以修改的字符串对象,可以使用StringBuffer和StringBuilder,StringBuffer是线程安全的,由于StringBuilder不需要进行同步操作,StringBuilder是比较快速的。