找了些资料看了下,差不多也是这个意思。就其原因是因为函数:ensureCapacity( )和 expandCapacity( )进行了控制
public synchronized void ensureCapacity( int minimumCapacity) {
if (minimumCapacity > value.length) {
// 当设置StringBuffer的容量小于当前容量时,容量不变。
expandCapacity(minimumCapacity);
}
}
private void expandCapacity( int minimumCapacity) {
int newCapacity = (value.length + 1 ) * 2 ;
if (newCapacity < 0 ) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
// 当设置StringBuffer的容量大于(当前容量+1)*2,则容量变为用户所设置的容量。
// 否则,容量为(当前容量+1)*2,即newCapacity
newCapacity = minimumCapacity;
}
char newValue[] = new char [newCapacity];
System.arraycopy(value, 0 , newValue, 0 , count);
value = newValue;
shared = false ;
} |