在Java中,StringBuffer(以及它的现代替代品 StringBuilder)被称为字符串缓冲(或字符串构建器),主要是为了解决 频繁修改字符串时性能和内存浪费的问题。下面从原理、场景和对比来说明为什么要用它。
String 不适合频繁修改?在 Java 中:
String s = "a";
s = s + "b";
表面上看是“修改字符串”,但实际上是:
"ab"s 指向新对象"a" 变成垃圾对象String 是 不可变对象(immutable)StringBuffer 是什么?StringBuffer 是一个 可变的字符串缓冲区:
StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.append("c");
System.out.println(sb.toString()); // abc
StringBuffer / StringBuilder?| 场景 | String | StringBuffer / StringBuilder |
|---|---|---|
| 字符串拼接 | 每次新建对象 | 只操作内部数组 |
| 循环拼接 | 性能极差 | 性能很好 |
| 内存占用 | 高 | 低 |
// 不推荐
String s = "";
for (int i = 0; i < 10000; i++) {
s += i; // 每次都新建 String
}
// 推荐
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
String result = sb.toString();
StringBuffer vs StringBuilder| 对比项 | StringBuffer | StringBuilder |
|---|---|---|
| 线程安全 | ✅ 安全(synchronized) | ❌ 不安全 |
| 性能 | 稍慢 | 更快 |
| 使用场景 | 多线程 | 单线程(推荐) |
✅ 结论:
StringBuilderStringBufferStringBuffer / StringBuilderString)// 编译器会自动优化为 StringBuilder
String s = "a" + "b" + "c";
用
StringBuffer / StringBuilder是为了在频繁修改字符串时,避免String不可变带来的性能问题和内存浪费。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。