1、可变与不可变
String是不可变的
StringBuffer和StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串
所以StringBuffer和StringBuilder是可变的。
2、安全与不安全
String因为是常量,对象是不可变的,所以是线程安全的
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以也是线程安全的
StringBuilder并没有对方法进行加同步锁,所以是非线程安全的
3、运行速度
StringBuilder > StringBuffer > String
总结
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况