StringBuilder优化字符串修改性能的核心是可变数组+合理初始化+纯追加操作;最适合从头拼接场景,预估容量宁高勿低,链式append高效,用完需toString,非线程安全。

StringBuilder 优化字符串修改性能,核心在于避开 String 不可变性带来的重复对象创建和内存复制。它不靠“魔法”,而靠可变数组 + 合理初始化 + 纯追加操作这三件事。
用对场景:改内容 ≠ 拼内容
StringBuilder 不是万能替换工具,它最适合“从头攒一个字符串”的过程——比如循环拼接、日志组装、JSON 构建。但如果你只是偶尔改几个字符(比如把中间某个字段替换成新值),直接用 replace() 或 delete() + insert() 反而比先 toString() 再用 String 方法更慢,因为它们要移动大量字符。
- 纯追加(append):最快,只写末尾,零复制
- 插入/删除/替换:涉及数组搬移,开销明显上升
- 反转(reverse):全量倒序,适合一次性需求,别在高频循环里调
预估容量:避免扩容复制的隐形开销
默认容量 16 在真实业务中基本不够用。每次扩容都要 new 更大数组 + 复制旧内容,实测中 Arrays.copyOf 常成 CPU 热点。预估不是算准,而是“宁高勿低”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 固定模板 + 变量:把模板字符数 + 所有变量最大可能长度加总,再加 10%~20% 余量
- 集合拼接(如 List 转 CSV):元素数 × 平均长度 + 分隔符数 × 分隔符长度
- 完全不确定但量大:起步设 2048 或 4096,比默认 16 强得多
链式追加:一次到位,不绕弯
append() 返回 this,天然支持链式调用。它能自动处理 int、boolean、Object 等类型,无需手动 toString():
立即学习“Java免费学习笔记(深入)”;
- ✅ 推荐:sb.append("ID:").append(id).append(", name:").append(name)
- ❌ 避免:sb.append("a" + "b") —— 编译器会先建临时 StringBuilder 拼字面量,白费预分配
- ❌ 别在循环里每 append 一次就 toString(),那等于回到 String 拼接的老路
用完即弃,别长期持有
StringBuilder 是过程型工具,不是结果容器。拼完必须调 toString() 获取最终 String;之后若继续 append,是在新字符串基础上累加,不是“复用”。另外:
- 它非线程安全,多线程别共用同一实例
- 想复用?用 sb.setLength(0) 清空逻辑长度,比 new 一个快得多
- 真需线程安全,才考虑 StringBuffer,但单线程下它慢一半以上


















