关于Java中StringBuffer的capacity问题
来源:互联网 发布:2017网络效应题库 编辑:程序博客网 时间:2024/05/21 09:51
从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 void main(String[] args) { 2 3 //StringBuffer的初始容量为16个字节长度。 4 5 StringBuffer s = new StringBuffer(); 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=7214 15 sop(s);16 17 sop(s.capacity()); //字符串容器的容量18 19 sop(s.length()); //字符串的实际长度20 21 }
- 关于Java中StringBuffer的capacity问题
- JAVA---揭秘StringBuffer的capacity
- StringBuffer的Capacity详解
- StringBuffer的capacity
- StringBuffer的capacity()方法
- 关于C++中Size和Capacity的问题
- 关于StringBuffer对象的capacity方法返回值
- StringBuffer中length()和capacity()的区别用法
- StringBuffer中length()和capacity()的区别用法
- Java-002-StringBuffer中的capacity的扩增机制
- java StringBuffer的length()和capacity()方法比较
- stringbuffer capacity()的疑问
- 关于在集合中加入StringBuffer的问题
- StringBuffer的capacity如何让你的程序运行的更快(1)之续---揭秘StringBuffer的capacity
- 在构造StringBuffer对象时,指定合适的capacity
- StringBuffer setLength 和 append对capacity的影响
- StringBuffer中的length和capacity方法的区别
- 关于java中String、StringBuffer、StringBuilder
- UVA 10344 (13.07.19)
- Multi-Projector Based Display Code ---- ImageViewer
- HDU 4350 Card(数学)
- 封装一个自动检索框,原型是autocomplete
- Multi-Projector Based Display Code ---- ModelViewer
- 关于Java中StringBuffer的capacity问题
- 红帽Linux.5.5企业版本在VM虚拟机里中文乱码的解决方法
- Simile Widget Timeline - 用靜態網頁表現時間線
- Multi-Projector Based Display Code ---- FAQ
- Getting Started with Timeline
- 学习C++步骤:
- Qt QLineEdit QLabel 添加clicked事件
- HDU1594find the max(简单的数学题)
- 理解计算