日期:2014-05-20  浏览次数:20800 次

StringBuffer()的问题,请大家看看.
StringBuffer()  
api中说:构造一个其中不带字符的字符串缓冲区,其初始容量为   16   个字符。


StringBuffer   sb=new   StringBuffer();//超过默认容量了,也不提示错误
sb.append( "1 ");
............
sb.append( "100 ");

StringBuffer   sb=new   StringBuffer(10);//超过容量了,不提示错误
sb.append( "1 ");
............
sb.append( "100 ");


增加到100不提示错误,已经超过了16啊.请问是为什么啊?

------解决方案--------------------
StringBuffer是可自动增长的
sb.capacity()表示当前可放字符串长度,超过这个值,StringBuffer容量自动增加
------解决方案--------------------
sb.capacity() 当前StringBuffer 可存储字符串的总长度,sb.append(string),如果现有长度与于string长度的和小于 (sb.capacity()+1)*2 的话,那么现在的sb.capacity() 就增长到(sb.capacity()+1)*2,如果大于,sb.capacity() 就为未增加string之前的长度+string的长度
------解决方案--------------------
楼上说的很有道理,补充下。它的APPENT性能相对比STRING+STRING高。
------解决方案--------------------
所以需要多大的尽量事先指定好,
即StringBuffer sb = new StringBuffer(n);
n尽量接近可能分配的内存的最大值。append当然比+快,是直接填充内存空间,而不是新建并拷贝。