Skip to content

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 是最优选择

基于 VitePress 构建