温馨提示×

温馨提示×

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

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

为什么用StringBuffer

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

在 Java 里经常提到“为什么用 StringBuffer”,通常是和 StringStringBuilder 对比来说的。可以从可变性、线程安全、性能、使用场景几个方面理解。


1. String 是不可变的,频繁修改效率低

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

每次 + 都会:

  • 创建一个新的 String 对象
  • 拷贝原内容
  • 再拼接新内容

循环或大量拼接时,会产生大量临时对象,性能很差,也增加 GC 压力。


2. StringBuffer 是可变字符序列

StringBuffer 内部维护一个可扩容的字符数组,拼接时:

  • 直接在原对象上修改
  • 不够时才扩容
  • 不会频繁创建新对象
StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.append("c");

✅ 适合频繁修改字符串的场景


3. StringBuffer 是线程安全的

StringBuffer 的公开方法基本都用了 synchronized

public synchronized StringBuffer append(String str)

所以在多线程环境下:

  • 多个线程同时调用 append 等方法是安全的
  • 不需要额外加锁

例如:

  • 多线程日志拼接
  • 共享的字符串缓冲区

4. 和 StringBuilder 的区别

对比项 StringBuffer StringBuilder
线程安全 ✅ 安全 ❌ 不安全
性能 稍慢 更快
使用场景 多线程 单线程

JDK 5 之后引入 StringBuilder,单线程优先用 StringBuilder


5. 什么时候用 StringBuffer?

✅ 用 StringBuffer 的情况:

  • 字符串需要频繁修改
  • 并且在多线程环境下使用

❌ 不建议用的情况:

  • 单线程 → 用 StringBuilder
  • 字符串不怎么变 → 用 String

一句话总结

StringBuffer 是为了在多线程环境下,高效、安全地进行字符串拼接和修改。

如果你愿意,我也可以给你一个 String vs StringBuffer vs StringBuilder 的性能对比示例。

向AI问一下细节

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

AI