在 Java 里常说 String 比 StringBuilder(或 StringBuffer)慢,核心原因只有一个:String 是不可变对象(immutable)。
下面从原理上解释为什么“慢”。
String s = "a";
s = s + "b";
在底层发生了什么?
"a" 不能被修改"ab"s 指向新对象"a" 变成垃圾,等待 GC✅ 每次拼接都会:
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
底层是:
char[]✅ 拼接越多,差距越大
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
每次循环:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
| 方面 | String | StringBuilder |
|---|---|---|
| 对象创建 | 多 | 少 |
| 内存拷贝 | 多 | 少 |
| GC 压力 | 大 | 小 |
✅ 少量拼接 / 编译期已知
String s = "a" + "b" + "c";
编译器会优化成:
String s = "abc";
✅ 单次拼接,不是循环
String 慢,是因为拼接就要新建对象;
StringBuilder 快,是因为它在原地修改。
如果你愿意,我也可以:
StringBuffer vs StringBuilderchar[] 扩容机制免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。