String与StringBuilder转换需精准:String转StringBuilder用new StringBuilder(str),StringBuilder转String必须用toString();空值需校验,非线程安全,避免循环中反复转换。

Java里字符串处理绕不开String和StringBuilder,它们的转换不是“能不能”的问题,而是“怎么转得准、用得稳”的问题。核心就两点:String转StringBuilder靠构造方法,StringBuilder转String靠toString()——看似简单,但实际写错、漏调、误用的情况很常见。
String转StringBuilder:两种写法,推荐第一种
最常用也最直接的方式是用StringBuilder的构造方法:
- new StringBuilder(str) —— 推荐。一步到位,内部直接复制字符数组,效率高、语义清晰
- new StringBuilder().append(str) —— 可行但多了一步。适合后续还要连续append其他内容的场景,单独为转换而append反而冗余
注意:不能直接赋值,比如 StringBuilder sb = str; 会编译报错。String和StringBuilder是不同类,没有隐式转换关系。
StringBuilder转String:只用toString(),别用其他方法
完成拼接或修改后,必须调用 toString() 才能得到最终的String对象:
立即学习“Java免费学习笔记(深入)”;
- sb.toString() —— 唯一标准方式。返回一个新String,内容与当前StringBuilder一致,且不影响原StringBuilder
- 不要用
sb + ""或"" + sb—— 这会触发字符串拼接的隐式转换,底层仍新建StringBuilder再转String,多此一举还可能引发意外行为 - 不要试图强转,如
(String)sb—— 编译不通过,类型不兼容
什么时候该转换?关键看操作阶段
转换不是目的,而是为了匹配不同阶段的需求:
- 需要频繁增删改(比如循环拼接、插入、替换)→ 先转成StringBuilder操作
- 操作完成,要输出、传参、存数据库、做比较 → 立刻转回String
- 如果只是读取或简单拼接(比如两三个字面量相加),直接用String更简洁,不必来回转换
容易踩的坑:空值、线程、性能误区
实战中几个高频错误点:
-
没判null就转:String为null时,
new StringBuilder(null)会抛NullPointerException;建议先校验或用Objects.toString(str, "")做兜底 - 误以为StringBuilder线程安全:它不是线程安全的。多线程共用同一个StringBuilder实例必须加锁,否则结果不可预期
- 过度转换:在循环里反复“String→StringBuilder→String”,相当于把性能优势全抵消了。应尽量把所有拼接逻辑放在StringBuilder内完成,最后统一转一次


















