温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

StringBuilder为何比String高效

发布时间:2026-09-15 07:53:21 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 中,StringBuilder 比 String 高效,核心原因在于 String 的不可变性(immutability) 以及由此带来的频繁对象创建和内存开销。

下面从原理到对比详细说明。


一、String 为什么“低效”

1. String 是不可变对象

String s = "a";
s = s + "b";

实际上发生了:

  1. 创建一个新 String "a"
  2. 再创建一个新 String "ab"
  3. 原来的 "a" 变成垃圾对象

✅ 每次拼接都会生成新的 String 对象

2. 大量拼接时的问题

String result = "";
for (int i = 0; i < 10000; i++) {
    result += i;
}

等价于:

result = new StringBuilder(result).append(i).toString();

问题:

  • 产生 上万个临时 String
  • 频繁 GC(垃圾回收)
  • 时间复杂度接近 O(n²)

二、StringBuilder 为什么高效

1. 可变字符序列

StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
  • 只操作 同一个对象
  • 字符直接写入内部 char[] 数组
  • 不生成中间对象

2. 内部使用可扩容数组

char[] value;
int count;
  • 默认容量 16
  • 空间不足时 一次性扩容(约 2 倍)
  • 避免频繁分配内存

3. 时间复杂度对比

操作 String StringBuilder
单次拼接 O(n) O(1)
n 次拼接 O(n²) O(n)

三、简单对比示例

String 方式(低效)

String s = "";
for (int i = 0; i < 10000; i++) {
    s += i;
}

StringBuilder 方式(高效)

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append(i);
}
String s = sb.toString();

✅ 后者速度通常 快几十倍甚至上百倍


四、常见误区说明

❌ StringBuilder 永远比 String 快?

不是:

  • 只拼接 1~2 次:String 更简洁,性能差异可忽略
  • 常量拼接(编译期优化):
String s = "a" + "b" + "c"; // 编译后直接是 "abc"

五、StringBuffer vs StringBuilder

类 线程安全 性能
StringBuffer ✅ 同步 稍慢
StringBuilder ❌ 非同步 更快

✅ 单线程优先用 StringBuilder


六、一句话总结

String 每次修改都创建新对象,StringBuilder 在同一对象上修改,因此更少对象、更少 GC、性能更高。

如果你愿意,我也可以从 JVM 内存模型 / 字节码层面 再深入讲一讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手