setlength 是 stringbuilder 中高效、零分配的长度修改方法,直接调整内部 count 字段:setlength(0) 快速清空并复用容量;setlength(n) 可截断或填充扩展,但需注意负数抛异常、超容扩容及线程不安全。

setLength 是 StringBuilder 中一个高效、零分配的修改长度方法,它不创建新对象,也不复制字符数组,而是直接调整内部字符数组的逻辑长度(count 字段),因此特别适合清空或截断操作。
用 setLength(0) 快速清空 StringBuilder
调用 setLength(0) 会将当前内容长度设为 0,但保留底层 char 数组容量,后续追加时可复用内存,避免频繁扩容:
- 比
new StringBuilder()更轻量,省去对象创建开销 - 比
delete(0, length())更直接,不涉及索引计算和边界检查 - 清空后
length()和toString()都返回空字符串,但容量(capacity)不变
用 setLength(n) 截断到指定长度
传入小于当前长度的正整数 n,可快速丢弃末尾多余字符:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 若
n ,则截断;若 <code>n > length(),则用 '\u0000'(空字符)填充扩展部分 - 常用于动态拼接后“回退”到某个中间状态,比如构建路径时临时添加后缀再撤回
- 注意:扩展时填充的 '\u0000' 在
toString()中不可见,但会影响charAt()或字节数组转换
和其它清空方式对比
相比常见替代方案,setLength(0) 在性能和语义上更优:
-
delete(0, length()):功能等价,但多一次范围校验,稍慢 -
replace(0, length(), ""):语义绕弯,内部仍调用 delete,且需构造空字符串 -
builder = new StringBuilder():重建对象,GC 压力更大,丢失原有容量优势
使用时要注意的细节
该方法虽高效,但需留意几个边界行为:
- 传入负数会抛出
IllegalArgumentException - 传入大于当前容量的值会触发数组扩容(与
ensureCapacity()类似) - 截断后如果继续追加,是从新长度位置开始写,不会覆盖原内容(除非超出容量)
- 多线程下非安全,必须确保无并发修改
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










