stringbuffer与stringbuilder底层实现完全一致,均继承abstractstringbuilder,共享非final字符数组、扩容策略及方法逻辑,唯一区别是stringbuffer所有公共方法加synchronized锁而stringbuilder不加。

StringBuffer 和 StringBuilder 的底层方法实现几乎完全一致,关键差异只在同步控制上。
共用 AbstractStringBuilder 作为父类
两者都继承自 AbstractStringBuilder,共享同一套核心逻辑:
- 底层存储都是非 final 的
byte[] value(JDK 9+)或char[] value(JDK 8),支持原地修改; - 所有字符串操作方法(
append、insert、delete、reverse)都在父类中实现; - 扩容策略相同:容量不足时按
oldCapacity * 2 + 2计算新容量,并调用Arrays.copyOf复制内容。
同步机制是唯一实质区别
方法签名和逻辑一样,但加锁方式不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
StringBuffer 的每个公共修改方法(如
append(String))都用synchronized修饰,等效于整个方法块加对象锁; -
StringBuilder 对应方法完全去掉了
synchronized,不提供任何线程安全保证; - 二者 toString() 都是直接 new String(value, 0, count),但 StringBuffer 的该方法也带 synchronized,StringBuilder 不加。
构造与初始化行为一致
初始化流程无差异:
- 默认构造函数都分配初始容量为 16 的数组;
- 带参构造(如
new StringBuilder("abc"))都会根据入参长度计算初始容量(通常为 len + 16); - 内部
count字段始终记录当前有效字符数,由子类方法统一维护。
源码级对比示例(JDK 17)
以 append(String str) 为例:
- StringBuffer 中定义为:
public synchronized StringBuffer append(String str); - StringBuilder 中定义为:
public StringBuilder append(String str); - 二者方法体都只有一行:
super.append(str),实际逻辑全在 AbstractStringBuilder 里。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










