Java 中的 String、StringBuilder、StringBuffer 区别
一、背景
String 是 Java 中最常用的类型,但经常有人搞混它与 StringBuilder、StringBuffer 的区别。 理解它们的差异,有助于编写高性能的字符串处理代码。
二、核心区别对比
| 特性 | String | StringBuilder | StringBuffer |
|---|---|---|---|
| 可变性 | ❌ 不可变 | ✅ 可变 | ✅ 可变 |
| 线程安全 | ✅ 安全(不可变) | ❌ 不安全 | ✅ 安全(加 synchronized) |
| 性能 | 慢 | 快 | 比 StringBuilder 慢一点 |
| 适用场景 | 字符串常量 | 单线程拼接 | 多线程拼接 |
三、示例对比
String s = "A";
s += "B";
s += "C";
System.out.println(s); // ABC
每次拼接都会创建新的 String 对象,浪费内存。
优化方式👇
StringBuilder sb = new StringBuilder();
sb.append("A").append("B").append("C");
System.out.println(sb.toString()); // ABC
四、性能差异(示意)
| 场景 | String 拼接 | StringBuilder |
|---|---|---|
| 拼接 1 次 | 快 | 快 |
| 拼接 1000 次 | 非常慢 | 非常快 |
✅ 建议:
日常拼接用 StringBuilder
多线程中用 StringBuffer
字符串常量直接用 String
五、小结
String:不可变、安全、慢StringBuilder:可变、快、单线程- StringBuffer:可变、线程安全
