调用 StringBuilder 的 toString() 方法可安全生成新 String 对象,该方法返回独立不可变字符串,原 StringBuilder 不受影响;隐式转换虽存在但不推荐,且不存在 new String(StringBuilder) 构造器。

直接调用 toString() 方法即可,但更常用、更高效的是调用 toString() 的等价写法 —— 实际上只需调用 toString(),不过要注意:StringBuilder 本身没有重写 toString() 返回新字符串的逻辑,它继承自 AbstractStringBuilder,而 toString() 就是标准的转 String 方法。
用 toString() 转换最直接
StringBuilder 的 toString() 方法会创建并返回一个内容相同的新 String 对象,原 StringBuilder 不受影响。
- 代码示例:String s = new StringBuilder("hello").toString();
- 注意:不是
.toSting()(拼写错误),也不是.getString()或.asString()等不存在的方法 - 该方法内部会 new String(char[], offset, count),是安全且不可变的字符串结果
隐式转换在字符串拼接中自动发生
当 StringBuilder 参与字符串拼接(如与 String 相加)时,Java 会自动调用其 toString(),无需手动写:
- String result = "prefix" + new StringBuilder("world"); → 等价于 "prefix" + new StringBuilder("world").toString()
- 但不推荐依赖此方式输出,因为可读性差,且容易误以为是引用传递
- 显式调用 toString() 更清晰、更可控
不要用 new String(StringBuilder) 构造器
Java 中没有 new String(StringBuilder) 这样的构造方法,尝试这样写会编译失败。
立即学习“Java免费学习笔记(深入)”;
- 错误写法:new String(sb)(编译报错)
- 正确替代:必须通过 sb.toString()
- 如果想“复制”内容再加工,也应先 toString(),再操作 String
toString() 后的 String 是独立对象
生成的 String 与原 StringBuilder 完全无关,修改 StringBuilder 不会影响已生成的 String,反之亦然。
- 例如:StringBuilder sb = new StringBuilder("a"); String s = sb.toString(); sb.append("b"); → s 仍是 "a",不会变成 "ab"
- 这是 Java 字符串不可变性的体现,也是安全使用的前提


















