JDK1.8源码阅读记录
JAVA.LANG包
StringBuffer类
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
StringBuffer继承AbstractStringBuilder,实现Serializable、CharSequence,Serializable是可以序列化的标志,CharSequence接口包含了charAt()、length() 、subSequence()、toString()这几个方法,而AbstractStringBuilder则是StringBuffer主要功能的来源。
final修饰类,表示该类不能被继承。
变量
private transient char[] toStringCache;//用来缓存toString()方法返回的最近一次的value数组中的字符。当修改StringBuffer对象时会被清除。
static final long serialVersionUID = 3388685877147921107L;//序列化ID,当序列化与反序列化时用到,作为对象识别的认证。
//来自父类AbstractStringBuilder的变量
char[] value;//用来存储字符序列中的字符。value是一个动态的数组,当存储容量不足时,会对它进行扩容。
int 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数组的初始化。
- 无参构造,初始化容量为16个字符;
- capacity,初始化容量为capacity个字符;
- String str,初始化容量为str.length()+16个字符,并把str的字符添加到value数组中;
- CharSequence seq,初始化容量为str.length()+16个字符,并把seq的字符添加到value数组中;
常用方法
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return value.length;
}
@Override
public synchronized void ensureCapacity(int minimumCapacity) {
super.ensureCapacity(minimumCapacity);
}
@Override
public synchronized void trimToSize() {
super.trimToSize();
}
@Override
public synchronized void setLength(int newLength) {
toStringCache = null;
super.setLength(newLength);
}
@Override
public synchronized