String类是一个典型的不可变的类,当一个String对象创建成功后,该string类里包含的字符序列就固定下来了,以后永远不再变化。
String str=“hello”;
str=str+“ java”;
str=str+“.org”;
str变量原来指向的hello字符串对象并没有发生变化,只是变量str不再指向它了;而是指向了新的字符串对象,因此上面三行代码在内存中保存了三个String对象。但是前两个String对象永远不会被用到但是也不会被Jvm垃圾回收,因为它将一直存在于字符串池中----Java内存泄露的原因之一。
如果需要创建一个可变大小的字符串需要用StringBuffer或是StringBuilder,这两者的区别是前者是线程安全的所有方法都是被synchronized修饰的,但是会降低该方法的执行效率。所在在单线程时应该考虑使用StringBuilder。