String、StringBuilder、StringBuffer的区别?
请对比Java中 String、StringBuilder、StringBuffer 三者的区别,重点说明不可变性、线程安全性、性能特点以及各自的最佳使用场景。
回答
编译有声
String:不可变类。任何修改都会创建新对象,产生大量临时对象,效率低。线程安全(因为不可变)。适用于少量字符串操作或字符串常量。
StringBuilder:可变类,内部使用字符数组。线程不安全,但性能最高。适用于单线程下大量字符串拼接(如循环中的append)。
StringBuffer:可变类,内部方法用synchronized修饰。线程安全,性能比StringBuilder略低。适用于多线程环境下的字符串操作。
// 性能排序:StringBuilder > StringBuffer > String
String s = "a" + "b" + "c"; // 编译器优化为StringBuilder
总结:单线程频繁拼接用StringBuilder;多线程用StringBuffer;少量不变字符串用String。