stringbuilder支持链式调用是因为其append、insert等方法均返回this,即修改原对象后返回自身引用,实现就地更新与高效链式操作。

Java 中 StringBuilder 的链式调用,比如 sb.append("a").append("b").insert(0, "c"),能连续调用是因为它的大多数修改方法(如 append、insert、delete、reverse 等)都返回 this —— 即当前对象自身的引用。
方法签名直接返回 StringBuilder 类型
这些方法不是返回 void,而是明确声明返回 StringBuilder,并在方法末尾写 return this;。例如源码中 append(String str) 的简化实现类似这样:
-
声明为
public StringBuilder append(String str),不是void - 内部完成字符数组扩容、内容拷贝等操作
- 最后一行是
return this;,把当前实例返回出去
返回的是同一个对象,不是新对象
StringBuilder 是可变(mutable)的,所有修改都在原对象的内部 char[] value 数组上进行。每次调用 append 或 insert 并不会创建新对象,所以 return this 返回的就是调用前的那个实例。这意味着:
- 链式调用中,每一步操作都作用在同一个对象上
- 没有额外的对象分配开销,性能高效
- 如果把中间结果赋值给另一个变量,比如
StringBuilder b = sb.append("x");,那么sb == b为true
和 String 的不可变性形成对比
String 的 concat 或 substring 方法返回的是新对象,因为 String 不可变;而 StringBuilder 的设计目标就是高效拼接和修改,所以选择就地修改 + 返回自身。这种模式也叫「流式 API」或「方法链(method chaining)」,本质就是每个方法做完事,把“自己”交出去继续干活。
注意:不是所有方法都支持链式调用
有些方法返回的是其他类型,无法继续链式调用,例如:
-
toString()→ 返回String,链式中断 -
length()、charAt(int)、indexOf(String)→ 返回基本类型或int,无法再点方法 -
capacity()→ 返回int,同理
只要方法返回 StringBuilder,就可以接着链;一旦返回别的类型,链就断了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











