在 Java 里经常提到“为什么用 StringBuffer”,通常是和 String、StringBuilder 对比来说的。可以从可变性、线程安全、性能、使用场景几个方面理解。
String s = "a";
s += "b";
s += "c";
每次 + 都会:
String 对象在循环或大量拼接时,会产生大量临时对象,性能很差,也增加 GC 压力。
StringBuffer 内部维护一个可扩容的字符数组,拼接时:
StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.append("c");
✅ 适合频繁修改字符串的场景
StringBuffer 的公开方法基本都用了 synchronized:
public synchronized StringBuffer append(String str)
所以在多线程环境下:
append 等方法是安全的例如:
| 对比项 | StringBuffer | StringBuilder |
|---|---|---|
| 线程安全 | ✅ 安全 | ❌ 不安全 |
| 性能 | 稍慢 | 更快 |
| 使用场景 | 多线程 | 单线程 |
JDK 5 之后引入
StringBuilder,单线程优先用StringBuilder
✅ 用 StringBuffer 的情况:
❌ 不建议用的情况:
StringBuilderString用 StringBuffer 是为了在多线程环境下,高效、安全地进行字符串拼接和修改。
如果你愿意,我也可以给你一个 String vs StringBuffer vs StringBuilder 的性能对比示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。