对,它确实就是用来拼字符串 的,但关键在于:它不是"多拼几个字符",而是"少创建很多对象"。
最典型场景:循环里拼字符串
java
// 不推荐
String result = "";
for (int i = 0; i < 10000; i++) {
result += "data" + i; // 每次循环都会产生新对象
}
// 推荐
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append("data").append(i);
}
String result = sb.toString();
String += 在循环里会不断创建临时对象,数据量大时 GC 压力会明显上升;StringBuilder 始终操作同一个可变数组,只在最后生成一次 String。
其他常见场景
- 动态组装 SQL / JSON / XML
- 批量拼接日志、报表内容
- 解析文本时逐步拼接
- 需要
insert、delete、reverse这类原地修改操作
什么时候不用它
如果只是简单拼接一次:
java
String msg = "用户 " + name + " 已登录";
这种用 + 就行,编译器会优化,可读性也更好。
所以可以记成:少量拼接用 +;循环、动态组装、大数据量拼接用 StringBuilder;多线程共享拼接才考虑 StringBuffer。
需要我帮你梳理一下 StringBuilder 的常见操作方法,方便应对面试中的手写代码题吗?