StringBuilder的链式调用支持append、insert、delete、deleteCharAt、replace、setCharAt、reverse等绝大多数修改类方法,因其均返回this;toString()例外,返回String导致链式中断。

Java中StringBuilder的链式调用,核心在于其所有修改类方法(如append、insert、delete等)都返回this,即当前StringBuilder对象本身。这使得多个操作可以连续书写,避免重复变量引用,提升代码可读性和简洁性。
哪些方法支持链式调用?
StringBuilder中绝大多数实例方法都遵循“返回this”的设计原则,包括:
- append():追加字符、字符串、数字等,最常用
- insert():在指定位置插入内容
- delete() 和 deleteCharAt():删除指定范围或单个字符
- replace():替换指定区间的字符
- setCharAt():修改某一位字符
- reverse():反转整个字符串
注意:toString() 是例外——它返回String类型,不返回StringBuilder,因此链式调用在此中断。若需后续继续操作,得重新赋值或另起链式。
链式调用的典型实战场景
常见于构建动态SQL、拼接日志、组装HTTP参数、生成XML/JSON片段等需要多步文本加工的场合。
立即学习“Java免费学习笔记(深入)”;
例如,构造一个带条件的SQL查询语句:
String sql = new StringBuilder("SELECT * FROM users WHERE 1=1")
.append(" AND status = 'active'")
.append(" AND age > ")
.append(18)
.append(" ORDER BY created_time DESC")
.toString();再比如格式化日志消息,嵌入变量并统一处理空格与换行:
String log = new StringBuilder()
.append("[INFO]")
.append(" User: ").append(userName)
.append(" | Action: ").append(action)
.append(" | Time: ").append(new Date())
.toString();链式调用的注意事项
链式写法虽简洁,但需留意几个易错点:
- 每个方法调用都会直接修改原对象,不存在不可变副本——所有链式操作共享同一StringBuilder实例
- 如果中间某步逻辑依赖前一步结果(如先append再delete),要确保索引计算准确,尤其涉及length变化时
- 避免在链式中混用toString()后继续调用StringBuilder方法(编译不通过),必要时拆成两段
- 多线程环境下不能共享同一个StringBuilder实例做链式操作,它不是线程安全的;如需并发使用,应改用StringBuffer或加锁
和StringBuffer的区别是否影响链式?
StringBuffer也支持完全相同的链式调用方式,因为它的对应方法同样返回this。二者API几乎一致,差异仅在于线程安全性:StringBuffer的方法是synchronized的,而StringBuilder不是。所以链式语法通用,选型只取决于是否需要线程安全——日常单线程场景优先用StringBuilder,性能更好。



















