温馨提示×

温馨提示×

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

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

StringBuilder有何性能优势

发布时间:2026-10-26 15:16:08 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

StringBuilder 的性能优势主要体现在减少字符串拼接时的对象创建和内存拷贝开销,尤其是在频繁修改字符串内容的场景下。

下面从原理和对比角度说明:


1. 字符串不可变带来的问题

在 Java 中,String 是不可变对象:

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

实际发生的是:

  1. 创建一个新的 String 对象
  2. 将原字符串和 "b" 拷贝进新对象
  3. 旧对象等待 GC

如果在循环中:

String s = "";
for (int i = 0; i < 10000; i++) {
    s += i;
}
  • 会产生 上万个临时 String 对象
  • 大量字符拷贝
  • 频繁 GC,性能极差

2. StringBuilder 的性能优势

✅ 可变字符数组

StringBuilder 内部维护一个 可扩容的 char 数组:

StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
  • 不会每次都新建对象
  • 只在容量不足时才扩容(通常翻倍)

✅ 减少对象创建

方式 对象创建次数
String + O(n)
StringBuilder 1(或极少)

✅ 减少内存拷贝

  • String:每次拼接都全量拷贝
  • StringBuilder:只在 append 时追加

✅ 时间复杂度对比

假设拼接 n 次:

方式 时间复杂度
String + O(n²)
StringBuilder O(n)

3. 典型性能对比示例

// String
long start = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 100000; i++) {
    s += i;
}
System.out.println(System.currentTimeMillis() - start);

// StringBuilder
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
    sb.append(i);
}
System.out.println(System.currentTimeMillis() - start);

通常:

  • String:几百毫秒甚至更久
  • StringBuilder:几毫秒

4. 与 StringBuffer 的区别

类 线程安全 性能
StringBuilder ❌ 不安全 ✅ 更高
StringBuffer ✅ 安全 ❌ 较低

单线程场景优先用 StringBuilder


5. 使用建议

✅ 适合用 StringBuilder:

  • 循环拼接
  • SQL / JSON 拼接
  • 日志组装
  • 大量字符串处理

❌ 不适合:

  • 一次性拼接(直接用 + 更清晰)
  • 常量字符串(编译期已优化)

如果你愿意,我也可以:

  • 讲 JVM 层面的内存模型
  • 对比 StringBuilder 扩容机制
  • 分析 真实业务中的使用误区
向AI问一下细节

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

AI
助
手