JDK源码学习系列02----AbstractStringBuilder
因为看StringBuffer 和 StringBuilder 的源码时发现两者都继承了AbstractStringBuilder,并且很多方法都是直接super的父类AbstractStringBuilder的方法,所以还是决定先看AbstractStringBuilder的源码,然后再看StringBuffer 和 StringBuilder.
1.成员变量
AbstractStringBuilder和String一样,在其内部都是以字符数组的形式实现的。也就是String,StringBuffer以及StringBuilder在其内部都是以字符数组的形式实现的。
char value[];
int count;
2.构造函数
AbstractStringBuilder的构造函数中传入的capacity是指容量,实际长度是以leng中的count表示的,注意区分容量和实际长度。
AbstractStringBuilder() {
}
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
3.容量和长度
public int length() {
return count;
}
public int capacity() {
return value.length;
}
4.AbstractStringBuilder的扩容
public void ensureCapacity(int minimumCapacity) {
if (minimumCapacity > value.length) {//如果传入的容量大于原来的容量就扩容
expandCapacity(minimumCapacity);
}
}
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;//首先默认扩容为 (原容量+1)*2
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {//如果传入的容量大于 默认扩容量,则传入容量为新容量
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);
}
5.字符串减少存储空间
如果实际长度小于容量,为了减少存储空间,就把容量缩小为刚好满足字符串长度。
public void trimToSize() {
if (count < value.length) {