1、值可变性
String内部的value值是final修饰的,所以它是不可变的类,因此每次修改String的值都会产生一个新的对象, 元空间的常量池
String a = "你好"
a="他好"
而StringBuffer和StringBuilder是可变性类它们在字符串变更的时候不会产生新的对象。
2、线程安全方面
String是不可变类所以它是线程安全的。
StringBuffer也是线程安全的,应为它的每一个操作方法都加了synchernized锁。
StringBuilder线程不安全,方法没有进行同步处理,因此在单线程环境下,如果不需要考虑线程安全问题,使用StringBuilder会获得更高的性能。
3、性能方面
String由于每次修改都需要创建新的对象,所以在大量字符串操作或者字符串连接时,String的性能相对较低,因为它涉及到较多的内存分配。
StringBuilder在大量字符串操作时具有最高的性能,因为它省去了线程同步带来的开销。没有上锁,所以快。
StringBuilder相较于String,StringBuffer在多次修改字符串时性能较好,但由于其线程安 全机制,在单线程环境下可能会比StringBuilder稍慢。