String是final修饰的,不可变,每次操作都会产生新的String对象(一定程度上导致了内存浪费)。
StringBuffer和StringBuilder都是在原对象上进行操作(不会产生新对象)。
线程安全性:StringBuffer是线程安全的(内部方法都用synchronized关键字修饰),StringBuilder是线程不安全的;
性能(效率):StringBuilder>StringBuffer>String;
注:这里谈到一个对象是否线程安全,是不是需要额外进行加锁,保证满足三个条件:多线程环境下、变量为共享变量和结果不受影响。
应用场景:StringBuffer和StringBuilder经常需要改变字符串内容时使用。
如何选择:优先使用StringBuilder,多线程使用共享变量时为了保证结果的正确性使用StringBuffer,否则效率优先使用StringBuilder。