StringBuilder
StringBuilder 是可变字符串,用于高频拼接场景。相比 String,它在修改时不会创建新对象。
核心特点
| 特点 | 说明 |
|---|---|
| 可变 | 内容可以修改,不创建新对象 |
| 非线程安全 | 没有同步开销,性能更好 |
| 初始容量 | 16 个字符,自动扩容 |
基本操作
java
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 添加内容
sb.append("Hello");
sb.append(" World");
System.out.println(sb.toString());
// 插入
StringBuilder sb2 = new StringBuilder("Hello");
sb2.insert(5, " World");
System.out.println(sb2);
// 删除(索引 [5, 11))
StringBuilder sb3 = new StringBuilder("Hello World");
sb3.delete(5, 11);
System.out.println(sb3);
// 反转
StringBuilder sb4 = new StringBuilder("ABC");
sb4.reverse();
System.out.println(sb4);
}
}链式调用
StringBuilder 的方法大多返回 this,支持链式调用,写法简洁:
java
String result = new StringBuilder()
.append("SELECT ")
.append("* ")
.append("FROM ")
.append("users ")
.append("WHERE ")
.append("id = 1")
.toString();这在构建 SQL、JSON 等场景下非常有用。
容量管理
java
public class CapacityDemo {
public static void main(String[] args) {
// 默认初始容量 16
StringBuilder sb1 = new StringBuilder();
System.out.println("默认容量: " + sb1.capacity());
// 指定容量
StringBuilder sb2 = new StringBuilder(100);
System.out.println("指定容量: " + sb2.capacity());
// String 构造:容量 = 字符串长度 + 16
StringBuilder sb3 = new StringBuilder("Hello");
System.out.println("String 构造: " + sb3.capacity()); // 21 = 5 + 16
}
}容量不够时会自动扩容,扩容规则是 2倍 + 2。如果预估大小,可以提前指定容量避免多次扩容带来的性能损耗。
注意事项
- 非线程安全:多线程环境下请使用 StringBuffer
- 单线程首选:大多数场景下 StringBuilder 是最优选择
