java capacity_关于Java中StringBuffer的capacity问题
從API查到capacity的作用是查看StringBuffer的容器容量是多少,剛開始納悶這個跟length的區別在哪?試驗了幾次感覺有點不解。所以直接跟進源碼分析。
直接通過new StringBuffer(String str);時,capacity是str.length+16,從源碼可知:
如果直接是new StringBuffer(),則capacity為16,見下圖:
如果小于16則默認容器的大小為16。如果大于16則會調用expandCapacity 函數進行容量的擴展。
由源碼可以看到擴展的規則是把舊的容量(value的長度)*2+2,然后與現有的比較,如果小于則把現有的容量當做新的,如果大于則用新得到的容量。
所以第一次append時,小于16則不需擴展,如果大于16則會直接擴展到34(16*2+2),比較得到大于append后的長度的話則用34,如果不 是則用append后的長度。
此時capacity的大小等于append后的長度,如果在append的話,若不超過70(34*2+2)的話,此時則capacity為70,如果超過70則繼續用第二次append后的總長度。
實驗源碼:
1 public static voidmain(String[] args) {2
3 //StringBuffer的初始容量為16個字節長度。
4
5 StringBuffer s = newStringBuffer();6
7 s.append("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww");8
9 //超過16不超過34則用34,超過34則用append后的長度
10
11 s.append("a");12
13 //若上面append剛好超過34,為35,則capacity為35,但是若append一個字節,則為35*2+2=72
14
15 sop(s);16
17 sop(s.capacity()); //字符串容器的容量
18
19 sop(s.length()); //字符串的實際長度
20
21 }
總結
以上是生活随笔為你收集整理的java capacity_关于Java中StringBuffer的capacity问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人民银行70周年纪念币
- 下一篇: 花呗消费可以使用借呗还款吗?做法可行