StringBuffer的扩容原理

在Java中,String是一个常量,一旦创建其值后不能更改但可以共享。

如果我们把多个字符串进行连接(拼接)操作,就会开辟很多空间,从而造成了大量内存空间的浪费。

为了解决这个问题,我们需要用到StringBuffer类和StringBuilder类。

StringBuffer与StringBuilder的区别

共同点:底层数据结构都是char类型的数组,都是可变的字符串。

不同点:StringBuffer线程同步的安全性高,但多线程操作时效率低。StringBuilder线程不同步,进行多线程操作时,安全性低,但效率高。

因为这两个类的用法都类似,所以我就以StringBuffer类为例来讲解。

构造方法:StringBuffer()

方法描述:构造一个没有字符的字符串缓冲区,初始容量为16。

public StringBuffer() {
        super(16);
    }

构造方法:StringBuffer(String str)

方法描述:构造一个初始化为指定字符串内容的字符串缓冲区,初始容量为str.length() + 16。

public StringBuffer(String str) {
        super(str.length() + 16);
        append(str);

StringBuffer的扩容原理

扩容原理:

StringBuffer的底层数组结构用的是char类型的数组。

所以,当我们使用StringBuffer对象的append(...)方法追加数据时,如果char类型数组的长度无法容纳我们追加的数据,StringBuffer就会进行扩容。

扩容时会用到Arrays类中的copyOf(...)方法,每次扩容的容量大小是原来的容量的2倍加2。

注: append(...)中的...代表各种类型的参数,如append(int i)、append(char c)、append(String str)等。copyOf(...)中的...代表各种类型的参数,如 copyOf(int[] original, int newLength)、copyOf(char[] original, int newLength)等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值