StringBuffer擴容源碼(JDK11中使用位運算)

StringBuffer擴容

StringBuffer、StringBuilder都繼承於AbstractStringBuilder
其中,StringBuffer是線程安全的,StringBuilder是線程不安全的。

JDK 11源碼

下圖爲AbstractStringBuilder中擴容源碼(JDK 11):
AbstractStringBuffer
重要變量釋義:
minCapacity:append操作後當前的 byte[]數組的length
oldCapacity:當前byte[]數組的容量(初始大小爲16)。
newCapacity:新的容量對oldCapacity右移1位再加2

注:當length超過了byte[]數組的容量就進行擴容

位運算

JDK 11版本擴容源碼使用"位運算"進行newCapacity的計算
例子:
以初始容量16爲例;10000(16的二進制)右移1位 100000
再加2,2的二進制爲10 相加後爲100010 轉換爲十進制就是34

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章