可变性
String是不可变的,这是因为String内部用于存储数据的char[]数组用了final关键字修饰,而且是private的,并且没有对外提供修改数组的方法。
StringBuffer和StringBuilder是可变的,它们内部的char数组没有用final关键字修饰。
线程安全性
由于String是不可变的,所以它是线程安全的。
StringBuffer中的方法都用了Synchronized修饰,也是线程安全的。
而StringBuilder中的方法没有用synchronized修饰,线程不安全。
性能
String不可变,每次操作String都会生成新的对象,它的性能最低。
StringBuffer中的方法用了synchronized关键字修饰,性能低于StringBuilder但高于String。
适合场景
String适合操作少量的数据。
StringBuffer适合多线程操作大量数据。
StringBuilder适合单线程操作大量数据。