stringbuilder与stringbuffer不能直接互转,必须通过string中转:stringbuilder→stringbuffer需先tostring()再构造,stringbuffer→stringbuilder同理;string与二者转换则直接使用构造器或tostring()方法。

Java里想把 StringBuilder 和 StringBuffer 互转,核心就两点:靠构造器初始化,靠 toString() 拿出字符串。它们本身不直接转彼此,得绕道 String。
StringBuilder 转 StringBuffer
没有直接构造方法支持 StringBuilder → StringBuffer,所以得先转成 String,再用 String 构造 StringBuffer:
- 写法一(推荐):
StringBuffer sb = new StringBuffer(stringBuilder.toString()); - 写法二(分步更清晰):
String s = stringBuilder.toString(); StringBuffer sb = new StringBuffer(s);
StringBuffer 转 StringBuilder
同理,也不能直转,必须经过 String 中转:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 简洁写法:
StringBuilder sb = new StringBuilder(stringBuffer.toString()); - 注意:不能用
new StringBuilder(stringBuffer)—— StringBuilder 没有接收 StringBuffer 的构造器
String 与两者之间的转换
这是最常用、也最直接的路径:
- String → StringBuilder:
new StringBuilder("abc")或new StringBuilder().append("abc") - String → StringBuffer:
new StringBuffer("abc")或new StringBuffer().append("abc") - StringBuilder → String:
sb.toString() - StringBuffer → String:
sb.toString()(不是new String(sb),虽可用但不推荐)
为什么不能直接互转?
因为 StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder,但彼此没提供对方类型的构造器或静态工厂方法。设计上它们定位不同:一个专注单线程高性能,一个强调多线程安全,JDK 没打算让它们“互通”,而是鼓励通过 String 这个通用中间态解耦。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










