Skip to main content
Version: 1.0

StringBuilder

String 不可变,循环中频繁拼接会产生大量临时对象。StringBuilder 是可变字符序列,专为高效拼接设计。

为什么需要它​

// 低效:每次 + 都创建新 String 对象,循环 1 万次就产生 1 万个垃圾对象
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}

// 高效:在同一个对象上原地追加
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
String result = sb.toString();

常用方法​

StringBuilder sb = new StringBuilder("Hello");

sb.append(" World"); // 追加:Hello World
sb.insert(5, ","); // 插入:Hello, World
sb.delete(5, 6); // 删除 [5, 6):Hello World
sb.replace(0, 5, "Hi"); // 替换:Hi World
sb.reverse(); // 反转:dlroW iH

int len = sb.length(); // 长度
String s = sb.toString(); // 转回 String

方法返回的都是 this,支持链式调用:

String sql = new StringBuilder()
.append("SELECT * FROM user")
.append(" WHERE age > ").append(18)
.append(" ORDER BY id")
.toString();

StringBuilder vs StringBuffer​

类线程安全性能使用场景
StringBuilder否高单线程(绝大多数情况)
StringBuffer是(方法加锁)略低多线程共享时

日常开发默认选择 StringBuilder。

常见用法示例​

// 拼接数组为逗号分隔字符串
int[] nums = {1, 2, 3, 4};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
if (i > 0) sb.append(", ");
sb.append(nums[i]);
}
System.out.println(sb); // 1, 2, 3, 4