源码解析StringBuffer--基于JDK-15

源码解析StringBuffer-基于JDK-15

导读

通过本文的阅读,可以了解StringBuffer类的构造,如何初始化以及内部的一些方法。了解为什么相对于String类,StringBuffer类可以更好的处理字符串。StringBuffer类的内部方法基本都是synchronized修饰的,说明是线程同步的,增加了线程的安全。


StringBuffer的源码分析

首先看下StringBuffer类的定义

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

StringBuffer类被final修饰,表明不可被继承,StringBuffer继承了AbstractStringBuilder类,实现了Serializable和CharSequence两个接口。

实现了Serializable接口表明可以序列化

实现了CharSequence接口,可以实现一些字符序列的操作,CharSequence接口有如下的一些方法:

int length();//获取字符串的长度
char charAt(int index);//获取选定索引对应的字符
CharSequence subSequence(int start, int end);//获取指定范围的字符串
public String toString();//转换成字符串对象
public default IntStream chars(){//源码中有默认的实现,主要是用来获取字符的int类型值的流
...
}
public default IntStream codePoints(){//默认实现,获取字符代码点的int类型值的流
...
}
public static int compare(CharSequence cs1, CharSequence cs2) {
...
}//默认实现,按照字典的顺序比较两个序列,如果第一个序列在字典上小于,等于或大于第二个序列,则分别返回负值,零或正值。

StringBuffer类的一些属性

private transient String toStringCache;
byte[] value;
byte coder;
int count;
  • toStringCache属性,主要是缓存toString()的返回值,避免重复的创建toString()对象。
  • value属性,主要是用来存储字符
  • coder属性,表示对字符串编码的编码器的ID
  • count属性,计数使用过的字符数

StringBuffer类的构造方法

public StringBuffer() {
	super(16);    
}

public StringBuffer(int capacity) {
	super(capacity);
}
public StringBuffer(String str) {
	super(str);
}
public StringBuffer(CharSequence seq){
	super(seq);
}
 
  • 其中没有参数的构造函数,是默认构造一个16长度的byte数组
  • 参数是int类型的构造函数,是构造指定容量长度的byte数组
  • 参数是String类型和CharSequence类型的构造函数,是构造(16+参数长度)的byte数组,增加长度的实现在继承的AbstractStringBuilder的构造函数中实现的。

再看下一些主要的方法

方法很多,下面是部分的截图
在这里插入图片描述
主要是一些增删改查,一些字符序列的操作。这个图片是用NetBeans查看JDK源码截的图,如果有需要可以查询具体的函数方法,函数都有解释说明,可以参考给出的解释一起看。

对其中的部分实现截图
在这里插入图片描述
大部分方法都是synchronized修饰的,说明线程是同步的,增加了线程的安全性


总结

通过对StringBuffer类得我源码进行分析,得出在看源码的时候主要从以下的几个方面进行分析。首先,分析类的定义,了解这个类是干什么的;其次,分析类的属性和构造方法,明白如何初始化;最后,再根据需要查看内部的一些方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值