在 Java 里,StringBuilder 之所以“不建议用加号(+)”,核心原因是:用 + 就失去了 StringBuilder 存在的意义,甚至比直接用 String 还别扭。下面分点说清楚。
+ 在字符串里是“新建对象”,不是“追加”Java 中:
String s = "a" + "b";
编译器实际上会:
StringBuilderappend("a")append("b")toString() 生成新 String也就是说:
+每次都会产生新对象
StringBuilder 的作用是:
在已有对象上连续修改内容,避免频繁创建 String
例如:
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
sb.append("c");
✅ 始终只有 一个 StringBuilder 对象
+StringBuilder sb = new StringBuilder();
sb.append("a" + "b");
这里发生了什么?
"a" + "b" → 先生成一个 新 String❌ 多创建了无意义的 String 对象
❌ 没有利用 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 s = "name: " + name;
编译器会优化,问题不大。
❌ 循环中、大量拼接 → 必须用 StringBuilder
StringBuilder 是为了“避免
+产生的临时对象”而存在的,用+就等于绕回原点。
如果你愿意,我也可以画一个 内存变化对比图,或者讲 StringBuilder vs StringBuffer vs StringJoiner 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。