AbstratrcStringBuilder是Stringbuffer与StringBuilder的父类 ,从它的的类修饰词中我们能够看出这个类是一个抽象类
abstract class AbstractStringBuilder implements Appendable, CharSequence { //注意到这是一个用Abstarct抽象词修饰的一个类
//关于他其中的属性
char[] value; //它是一个字节数组
int count; //显示被调用到的次数
//关于它其中的有参构造方法
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
//其他的方法
public int capacity() {
//只是显示出这个类其中的长度
return value.length;
}
2:关于扩容的方法
private void ensureCapacityInternal(int minimumCapacity) {
// 如果是第一次调用,那么这个value的长度就为0
if (minimumCapacity - value.length > 0) {
//对value字节数组赋值
value = Arrays.copyOf(value,
newCapacity(minimumCapacity));
}
}
//关于除去字符串空值得方法
public void trimToSize() {
//判断使用的次数与存储的次数作比较
if (count < value.length) {
value = Arrays.copyOf(value, count);
}
}
/**
*Arrays。copyof方法中主要是做了两件事
第一件事是新建一个字节数组
然后将原来的数组复制到新建的数组中去
*/
public static char[] copyOf(char[] original, int newLength) {
char[] copy = new char[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
3:关于AbstartctStringBuilder中的append方法
//首先判断是否为空,如果为null值,那么就直接添加一个null值。如果不为null值
首先创建一个新的数组,然后调用String中getChars()方法添加前面的数组中去,再然后就是赋值给count变量,
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
/**
这里是相当于append天添加一个char数组,这里面的逻辑其实相当于前面的逻辑
*/
public AbstractStringBuilder append(char[] str) {
int len = str.length;
ensureCapacityInternal(count + len);
System.arraycopy(str, 0, value, count, len);
count += len;
return this;
}
/**
添加一个boolean类型的数据时,代码逻辑其实都是一样的,只是相对于来是直接往数组中添加false或者是true这两个变量数据
public AbstractStringBuilder append(boolean b) {
if (b) {
ensureCapacityInternal(count + 4);
value[count++] = 't';
value[count++] = 'r';
value[count++] = 'u';
value[count++] = 'e';
} else {
ensureCapacityInternal(count + 5);
value[count++] = 'f';
value[count++] = 'a';
value[count++] = 'l';
value[count++] = 's';
value[count++] = 'e';
}
return this;
}