trimtosize() 将 stringbuilder 内部 char 数组容量缩减至接近当前 length,释放冗余内存;适用于拼接完成、长期只读或内存敏感场景,调用后不改变内容且后续 append 仍可扩容。

调用 trimToSize() 就能压缩 StringBuilder 内部字符数组的容量,让它刚好容纳当前内容,释放未使用的内存空间。
它怎么起作用
StringBuilder 底层用 char 数组存储内容,容量(capacity)通常比实际长度(length)大——这是为后续 append 预留空间。比如无参构造默认容量是 16,即使只存了 3 个字符,也占着 16 个位置。
trimToSize() 的作用就是把这块数组“裁剪”到刚好装下当前字符串的大小,减少内存占用。
什么时候该调用
- 拼接操作全部完成、不再追加新内容之后
- 对象生命周期较长,且后续长时间只读不修改(比如构建完就缓存起来)
- 明确关注内存使用,尤其在资源受限环境或高频创建大量 StringBuilder 的场景
怎么用才有效
直接调用即可,不需要参数,也不返回值:
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 此时 capacity 可能是 23,length 是 12
sb.trimToSize(); // 容量被缩减至 12 左右(具体取决于实现,但会贴近 length)
注意:
• 调用后 capacity() 返回值通常会下降,但不保证等于 length()(JVM 实现可能保留少量冗余)
• 它不改变字符串内容,也不影响后续操作;如果再 append,仍会自动扩容
和其他清理方式的区别
• setLength(0):清空内容但保留原有容量,适合循环复用
• sb = null 或让引用离开作用域:靠 GC 回收整个对象,不主动收缩内部数组
• trimToSize():专用于“瘦身”已有数组,不丢内容,也不影响对象存活
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











