implements java.io.Serializable, CharSequence
类是final的,表明不能被继承,本类继承自AbstractStringBuilder,实现了Serializable和CharSequence两个接口。
现在来看成员变量
private transient char[] toStringCache;
私有的char数组变量,目前猜测是做缓存用,用transient修饰表明不会被序列化。
下面来看构造方法
public StringBuffer() {
super(16);
}
调用父类的构造方法,传入16这个参数为value赋初始长度。
public StringBuffer(int capacity) {
super(capacity);
}
调用父类构造方法,将参数作为value的长度。
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
调用父类构造方法,先将参数的长度加上16作为value的长度,然后将参数拼接到value中。
public StringBuffer(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
先调用第二个构造方法,将参数的长度加上16传进去,然后拼接参数。
构造方法介绍完毕。
public synchronized int length() {
return count;
}
这个方法带了synchronized关键字,表明是个同步方法,返回的是count。
StringBuffer和StringBuilder的区别很多人说前者是线程安全的,其实不然,String源码里照样会给StringBuffer参数加锁,线程安全与否要看场景,光有个synchronized关键字不够的。。。
public synchronized int capacity() {
return value.length;
}
这个方法返回数组value的长度。