您的位置:程序门 -> java -> j2se / 基础类



stringbuffer()的问题,请大家看看.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


stringbuffer()的问题,请大家看看.[已结贴,结贴人:donbaoma]
发表于:2007-07-20 22:19:31 楼主
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啊.请问是为什么啊?
发表于:2007-07-20 22:23:521楼 得分:0
class   a
{
public   static   void   main(string   args[])
{
stringbuffer   sb=new   stringbuffer(1);
sb.append( "a ");
sb.append( "b ");
                system.out.println(sb.capacity());返回4是什么意思啊?
}
}
发表于:2007-07-20 23:08:012楼 得分:0
every   string   buffer   has   a   capacity.   as   long   as   the   length   of   the   character   sequence   contained   in   the   string   buffer   does   not   exceed   the   capacity,   it   is   not   necessary   to   allocate   a   new   internal   buffer   array.   if   the   internal   buffer   overflows,   it   is   automatically   made   larger.
也就是说如果超过默认容量,stringbuffer会自动增长
发表于:2007-07-20 23:33:093楼 得分:2
stringbuffer是可自动增长的
sb.capacity()表示当前可放字符串长度,超过这个值,stringbuffer容量自动增加
发表于:2007-07-21 01:24:274楼 得分:0
学习
发表于:2007-07-21 05:18:385楼 得分:2
sb.capacity()   当前stringbuffer   可存储字符串的总长度,sb.append(string),如果现有长度与于string长度的和小于   (sb.capacity()+1)*2   的话,那么现在的sb.capacity()   就增长到(sb.capacity()+1)*2,如果大于,sb.capacity()   就为未增加string之前的长度+string的长度
发表于:2007-07-21 08:16:196楼 得分:0
哦,原来如此啊?那么:
stringbuffer   sb=new   stringbuffer(1);//这样不是更好吗?可以节省内存啊?为什么别人不这么产生对象呢?
发表于:2007-07-21 09:13:267楼 得分:0
you   create   the   stringbuffer   object   just   to   use,   why   care   the   init   size?
发表于:2007-07-21 09:38:098楼 得分:0
哈哈,因为我是想从考虑内存的角度出发的.你没有这样想过吗?草蜢仔?
发表于:2007-07-21 10:19:319楼 得分:0
回楼上的,每次扩展容量消耗很大,stringbuffer本质上和数组也是差别不大的,可以认为是一个固定大小的string,每次超过了就新建一个更大的,这样反复初始化,反复拷贝原来的过去,效率是很低的,所以需要多大的尽量事先指定好。
发表于:2007-07-21 11:48:0510楼 得分:0
楼上的朋友,你说的我能听懂,但是有一句话不懂还请你解答一下,谢谢你了:
"所以需要多大的尽量事先指定好。   "
发表于:2007-07-21 11:49:0911楼 得分:10
楼上说的很有道理,补充下。它的appent性能相对比string+string高。
发表于:2007-07-21 22:07:3712楼 得分:6
所以需要多大的尽量事先指定好,
即stringbuffer   sb   =   new   stringbuffer(n);
n尽量接近可能分配的内存的最大值。append当然比+快,是直接填充内存空间,而不是新建并拷贝。


快速检索

最新资讯
热门点击