1.可变性
String内部是由final修饰的,所以是一个不可变的类,所以每次修改string值的时候都会产生一个新的对象;
StringBuffer和StringBuilder是一个可变类,字符串的变更不会产生新的对象;
2.线程安全性
String由于是不可变的所以是线程安全的
StringBuffer也是线程安全,因为它内部使用一个synchronized同步关键字;
StringBuilder不是线程安全,所以在多线程下操作应该使用以上两种;
3.性能方面
String由于不可变,在做字符串拼接或修改,需要重新创建新的对象以及内存分配;
StringBuffer比String性能更高点,因为它的可变性,意味着字符串被修改或者拼接不会导致新对象创建;
4.存储方面
String存储在字符串常量池中;
Stringbuffer和Stringbuider是存储在堆内存中的;
Stringbuffer和stringbuilder都是派生自AbstractStringbuidler这样一个抽象类。