CodeWalk

String、StringBuilder、StringBuffer的区别?

作者:编译有声 · 2026-05-30 12:55

请对比Java中 StringStringBuilderStringBuffer 三者的区别,重点说明不可变性线程安全性性能特点以及各自的最佳使用场景。

回答

编译有声

String:不可变类。任何修改都会创建新对象,产生大量临时对象,效率低。线程安全(因为不可变)。适用于少量字符串操作或字符串常量。

StringBuilder:可变类,内部使用字符数组。线程不安全,但性能最高。适用于单线程下大量字符串拼接(如循环中的append)。

StringBuffer:可变类,内部方法用synchronized修饰。线程安全,性能比StringBuilder略低。适用于多线程环境下的字符串操作。

// 性能排序:StringBuilder > StringBuffer > String
String s = "a" + "b" + "c"; // 编译器优化为StringBuilder

总结:单线程频繁拼接用StringBuilder;多线程用StringBuffer;少量不变字符串用String。