StringBuffer与StringBuilder底层扩容机制与常用方法
StringBuffer 与 StringBuilder底层分析、扩容机制与常用方法
StringBuffer(线性安全)
- 直接父类AbstractStringBuilder
- 实现了Serializable,可以串行化
- 在父类AbstractStringBuilder有属性char[] value 不是final类型,该value数字存放字符串内容,引出存放在堆中,所以在变化的时候不用每次都更改地址,创建新的对象,效率高
- 是一个final类,不能被继承
StringBuffer构造方法
- StringBuffer()初始容量为16
- StringBuffer(int capacity) 初始容量为指定大小
- StringBuffer(String str) 初始容量为指定字符串+16,注意是容量不是长度
StringBuffer扩容 (StringBuilder扩容机制一样)
扩容方式:2n+2
源码:
private int newCapacity(int minCapacity) {
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}StringBuffer、StringBuilder的类继承结构图,两者的结构图是一样的

StringBuffer常用方法
- 增 append
- 删 delete(start,end)
- 改 replace (start,end,string) ,string是要修改成的新内容
- 查 indexOf(string) , string是要 查找的内容
- 插入 insert
- 获取长度 length() 注意有括号
StringBuilder (不安全)
- 线程不安全,单线程优先使用,方法中没有synchronized修饰
- 主要操作时append和insert,可以重载这些方法,可以接受任何类型的数据
- 扩容机制与StringBuffer一样
String、StringBuffer、StringBuilder三者之间的区别
- StringBuffer、StringBuilder 均代表可变字符串,方法一样
- String:不可变字符序列,效率低,但是复用率高
- StringBuffer:可变字符串、增删效率高,线性安全
- StringBuilder:可变字符串、增删效率高,线性不安全
使用场景
1.如果字符串存在大量的修改操作,一般使用StringBuffer 或StringBuilder
2 . 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder
3.如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer
4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等
到此这篇关于StringBuffer与StringBuilder底层扩容机制与常用方法的文章就介绍到这了,更多相关StringBuffer与StringBuilder扩容与用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Boot + MyBatis Plus 高效开发实战从入
本文将详细介绍 Spring Boot + MyBatis Plus 的完整开发流程,并深入剖析分页查询、批量操作、动态 SQL、乐观锁、代码优化等实战技巧,感兴趣的朋友一起看看吧2025-04-04
利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片
这篇文章主要为大家详细介绍了利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-07-07
SpringBoot使用MyBatis的XML文件进行SQL语句编写
在现代 Java Web 开发中,Spring Boot 和 MyBatis 是两个非常流行的技术框架,本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句,感兴趣的可以了解下2025-07-07


最新评论