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