StringBuilder链式调用靠返回this,因append等方法均返回当前对象引用而非void或新对象;其可变性与this返回共同支撑高效链式操作,区别于String不可变导致每次拼接生成新对象。

StringBuilder 链式调用靠的是返回 this
StringBuilder 的 append、insert、delete 等方法,全部返回 this(当前 StringBuilder 对象的引用),而不是 void 或新对象。这使得连续调用成为可能,比如 sb.append("a").append("b").append("c") —— 每次调用后仍操作同一个对象实例。
和 String 的拼接有本质区别
String 是不可变的,每次 + 或 concat() 都会生成新对象,无法链式;而 StringBuilder 是可变的,所有修改都在原 char[] 数组上进行(必要时扩容),既高效又支持链式。面试中常被拿来对比,重点就是可变性 + this 返回这两点。
源码层面看关键实现
查看 StringBuilder.append(String) 方法:
- 它内部调用父类
AbstractStringBuilder.append() - 该方法完成字符数组扩容、复制、写入等逻辑
- 最后一行固定是
return this;
注意:StringBuffer 同样返回 this,但它所有方法加了 synchronized,所以线程安全但慢;StringBuilder 不加锁,快但不保证多线程安全——这点常作为延伸考点。
立即学习“Java免费学习笔记(深入)”;
链式调用不是语法糖,是设计选择
Java 本身不提供类似 Kotlin 的“扩展函数链式”或“作用域函数”,链式完全依赖开发者主动设计方法签名。StringBuilder 是 JDK 中典型的 Fluent Interface 实践:每个方法都做一件事、改状态、再返回自己。回答时可补充一句:这不是编译器特性,而是 API 设计者有意为之的易用性优化。


















