
JDK源碼閱讀:AbstractStringBuilder、StringBuffer、StringBuilder類閱讀筆記
<code>inflate()</code>方法可以将目前的Latin1編碼的字元串膨脹到16位,即UTF16編碼(Latin1編碼為8位)
<code>ensureCapacity(miniCapacity)</code>方法保證目前容器的大小不小于<code>miniCapacity</code>,如果小于的話就要進行擴容處理。擴容成下面兩者中的較大值。
miniCapacity
2*oldCapacity
<code>setCharAt()</code>方法可以将index處的字元設為ch
<code>append()</code>方法根據參數類型不同,在字元串後面追加。
值得一提的是這個<code>appendNull()</code>方法,當我們在試圖append一個空對象時,它居然選擇在builder串後面加上一個“null”,看下面的示例。
輸出結果居然是
也就是說,當append空對象時,會append一個“null”字元串。
另外,當我們嘗試append一個boolean對象時,會append一個“true”串或者“false”串。
<code>delete</code>方法删除builder中的一段
類似地還有<code>deleteCharAt</code>
<code>reverse()</code>方法可以逆轉字元的順序。
實際的方法就是雙指針靠攏+交換、
<code>StringBuffer</code>類幾乎所有方法都是通過<code>super</code>關鍵字調用<code>AbstractStringBuilder</code>父類的方法。
<code>StringBuffer</code>實作同步的方式就是給所有方法加上<code>synchronized</code>關鍵字。
<code>toStringCache</code>緩存了<code>toString()</code>方法的最後一次調用的值,在每次StringBuffer被修改前這個緩存會清除。
<code>toString()</code>方法中檢查如果有緩存,就直接傳回緩存。這樣不用每次都處理<code>toString()</code>的過程,而隻在需要的時候處理。
<code>StringBuilder</code>類幾乎所有方法都是通過<code>super</code>關鍵字調用<code>AbstractStringBuilder</code>父類的方法。