Java 深入理解StringBuilder和StringBuffer 自动扩容分析

本文深入解析StringBuilder的内部机制,包括继承关系、构造器、append方法的自动扩容原理及其实现细节,同时对比分析StringBuffer,阐述两者在多线程环境下的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、StringBuilder

1.继承关系

StringBuilder继承关系图
可见StringBuilder直接继承至AbstractStringBuilder

2.构造器

1)StringBuilder的构造器

public StringBuilder() {
   
        super(16);
    }
    
public StringBuilder(int capacity) {
   
        super(capacity);
    }
    
public StringBuilder(String str) {
   
        super(str.length() + 16);
        append(str);
    }

public StringBuilder(CharSequence seq) {
   
        this(seq.length() + 16);
        append(seq);
    }

这些构造器都调用了父类(即AbstractStringBuilder类)的构造器,我们看一下AbstractStringBuilder的构造器

2)AbstractStringBulider的构造器

char[] value;//用于字符存储
int count;//已使用字符数

AbstractStringBuilder(int capacity) {
   
        value = new char[capacity];
    }

当调用这个构造器时,会生成容量为capacity的char数组,如果StringBuilder没有传入capacity,则会调用super(16),即默认构造一个容量为16的字符数组

3.append方法(自动扩容原理)

虽然我们一开始指定了字符数组value的容量,但StringBuilder构造的对象是一个可变对象,调用append方法会占用容量,当容量不足时,会自动扩容
1)StringBuilder的append方法

@Override
public StringBuilder append(Object obj) {
   
    return append(String.valueOf(obj));
}

@Override
public StringBuilder append(String str) {
   
    super.append(str);
    return this;
}

...省略部分重载方法

StringBuilder的append方法有很多重载方法,但这些重载方法又都共同的调用了父类(AbstractStringBuilder)的append方法

2)AbstractStringBuilder的append方法

public AbstractStringBuilder 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值