StringBuilder 的 容量capacity 問題


public StringBuilder() {   //默認的容量是 16
super(16);
}
public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);    //count 表示當前stringbuilder 對象的長度  len 表示要添加對象的長度
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }

private void ensureCapacityInternal(int minimumCapacity) {  //用來判斷添加進來的對象加上原來的對象長度 是否大於value.length() 剛開始是16 
// overflow-conscious code
if (minimumCapacity - value.length > 0) {
value = Arrays.copyOf(value,
newCapacity(minimumCapacity));
}
}

private int newCapacity(int minCapacity) {        //如果大於的話 就增加容量  (value.lenght << 1 ) + 2 左移一位 相當於乘以2 得到 34 
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {      //如果34 小於 最小的容量(添加進來的對象加上原來的對象長度) 那么新的容量就是最小的容量
        newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}

  總結: stringBuilder 擴容的時候,容量不一定是 16*2 + 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM