StringBuilder 和 StringBuffer 的初始容量及扩容机制

 StringBuilder

默认容量大小:

1.无参数构造时,默认容量大小为16.

StringBuilder stb = new StringBuilder() // 默认初始大小16

 super父类的构造方法,传入16大小创造字符数组。

    /**
     * Creates an AbstractStringBuilder of the specified capacity.
     */
    AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

2.传入初始化大小 n 时,默认容量大小为 n

StringBuilder stb = new StringBuilder(11) // 默认大小就是自定义的 11

 

 3.传入字符串s进行初始化时, 默认容量大小为  s.length( ) + 16;

StringBuilder stb = new StringBuilder("123456") // 默认容量大小为 16 + 6

扩容机制 

StringBuilder默认扩容机制是 value.length() *2 + 2 . 

在进行添加append操作的时候会先判断容量大小是否可以存放新进的字符串长度,不够就进行扩容。


StringBuffer

默认容量大小以及扩容机制相同。

引入了 synchronized 关键字进行加锁操作,保证线程安全。

从下面代码可以看到其加锁操作在各个方法上面,对于字符数组char 没有进行 final 修饰,这是为了提高效率以及保证安全性总和考虑 就在方法上加了锁操作。

 char[ ] 字符数组没有进行final等机制。

总结:

StringBuffer 和 StringBuilder 扩容机制相同,初始化容量机制相同。

两者安全性不同,效率不同,更多可以参考

String、StringBuilder、StringBuffer的四大区别解析_极品小學生的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极品小學生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值