三者都是用于处理字符串,主要区别在于可变性、线程安全和性能
1、可变性:
String类被final修饰,是不可变的,进行修改时,会创建新的对象
StringBuffer和StringBuilder是可变的,需要修改时,会直接在原对象上修改
2、线程安全
String和StringBuffer是线程安全的,前者因为其不可变性,后者所有方法被synchronized修饰
StringBuilder是非线程安全的
3、性能
String频繁修改时性能较低,因其会不断创建新的对象
StringBuffer由于synchronized修饰后的同步机制,性能比StringBuild较低
StringBuilder在单线程情况下性能较高
4、使用场景
String 适合少量字符串或者不考虑线程安全的情况下使用(配置信息、常量)
StringBuffer适合多线程下大量字符串操作(并发日志处理)
StringBuilder适合单线程下大量字符串操作(循环拼接,动态sql)