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