异:
- StringBuffer是线程安全,StringBuilder是线程不安全
- StringBuffer得效率相对来讲要低,StringBuilder得效率较高
同:
- StringBuilder和StringBuffer以及String都是基于char[]
- StringBuilder与StringBuffer都继承于AbstractStringBuilder,他们得基本操作都是通过调用AbstractStringBuilder里面得方法实现得
- 前面说了是基于char[]得,所以肯定有内存再用问题,那么他们得char[]是怎么扩容多少呢
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity - minimumCapacity < 0)
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
value = Arrays.copyOf(value, newCapacity);
}
从上可看出首先将数组大小扩容为两倍,然后比较是否足够新得数组长度,如果够,则用扩容两倍得如果不够就用新数组得长度。