Java | StringBuffer源码分析

本文详细分析了Java中的StringBuffer类,包括其线程安全特性、内部主要变量、构造方法、核心方法如append()、delete()、replace()、charAt()及toString()的工作原理。通过对源码的解读,揭示了StringBuffer在字符序列操作中的效率和内存管理策略。
摘要由CSDN通过智能技术生成

前言

StringBuffer类表示一个可变的字符序列。StringBuffer的API与StringBuilder互相兼容,但是StringBuffer是线程安全的。在可能的情况下,建议优先使用StringBuilder,因为在大多数实现中它比StringBuffer更快。

相关知识

源码分析

定义

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
   
    ...
}

StringBuffer类被 final 所修饰,因此不能被继承。

StringBuffer类继承于 AbstractStringBuilder类。实际上,AbstractStringBuilder类具体实现了可变字符序列的一系列操作,比如:append()、insert()、delete()、replace()、charAt()方法等。值得一提的是,StringBuilder也是继承于AbstractStringBuilder类。

StringBuffer类实现了2个接口:

  • Serializable 序列化接口,表示对象可以被序列化。
  • CharSequence 字符序列接口,提供了几个对字符序列进行只读访问的方法,比如:length()、charAt()、subSequence()、toString()方法等。

主要变量

private transient char[] toStringCache;

// AbstractStringBuilder.java

char[] value;

int count;

value、count这两个变量是定义在AbstractStringBuilder类中的。其中:

  • toStringCache 用来缓存toString()方法返回的最近一次的value数组中的字符。当修改StringBuffer对象时会被清除。
  • value 用来存储字符序列中的字符。value是一个动态的数组,当存储容量不足时,会对它进行扩容。
  • count 表示value数组中已存储的字符数。

构造方法

public StringBuffer() {
   
    super(16);
}

public StringBuffer(int capacity) {
   
    super(capacity);
}

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

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

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

StringBuffer类提供了4个构造方法。构造方法主要完成了对value数组的初始化。其中:

  • 默认构造方法设置了value数组的初始容量为16。
  • 第2个构造方法设置了value数组的初始容量为指定的大小。
  • 第3个构造方法接受一个String对象作为参数,设置了value数组的初始容量为String对象的长度+16,并把String对象中的字符添加到value数组中。
  • 第4个构造方法接受一个CharSequence对象作为参数,设置了value数组的初始容量为CharSequence对象的长度+16,并把CharSequence对象中的字符添加到value数组中。

append()方法

@Override
public synchronized StringBuffer append(boolean b) {
   
    toStringCache = null;
    super.append(b);
    return this;
}

// AbstractS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值