stringbuilder 比 string 拼接快,因其可变且复用内部 char 数组,避免频繁创建临时对象;string 不可变,每次拼接都生成新对象,循环中 += 会反复新建 stringbuilder 并转 string,效率低下。

Java 中用 StringBuilder 替代 String 进行字符串拼接,核心在于避免创建大量临时对象——因为 String 是不可变的,每次拼接都会生成新对象;而 StringBuilder 是可变的、线程不安全但性能高,适合单线程下的频繁拼接。
为什么 StringBuilder 比 String 拼接快?
String 拼接(如 s1 + s2 或 s += "x")在编译期会被转为 StringBuilder.append(),但循环中反复使用 += 会导致多次新建 StringBuilder 对象再转回 String,实际效率低。StringBuilder 在堆上维护一个 char 数组,append 操作只是往数组末尾写入,扩容时才复制数组(按需增长,初始容量 16)。
如何正确初始化 StringBuilder
避免默认容量带来的多次扩容开销,尤其知道最终字符串大致长度时:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不知道长度:直接
new StringBuilder()(初始容量 16) - 预估长度约 100 字符:用
new StringBuilder(100) - 从已有字符串构建:用
new StringBuilder(str),容量 = str.length() + 16
典型高效拼接写法
替代循环中 str += ... 的常见低效模式:
- ❌ 错误写法:
String s = ""; for (int i = 0; i → 创建 100+ 个 String 对象 - ✅ 正确写法:
StringBuilder sb = new StringBuilder(); for (int i = 0; i
append 方法支持多种类型,无需手动转换
StringBuilder.append() 重载丰富,可直接传入 int、boolean、char、Object 等,内部自动调用 String.valueOf():
-
sb.append(123)→ 不用写sb.append(String.valueOf(123)) -
sb.append(true)、sb.append('a')、sb.append(list)都合法 - 链式调用:
sb.append("name: ").append(name).append(", age: ").append(age)
不复杂但容易忽略:用完记得调用 toString() 获取最终字符串;多线程环境请改用 StringBuffer(同步开销大,一般不推荐)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










