当我运行此代码时:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());
它给出了输出:
长度:17,容量:33
明显的长度与字符串中的字符数有关,但我不确定容量是多少? 在重新分配空间之前,StringBuffer可以容纳的字符数是多少?
答案 0 :(得分:9)
答案 1 :(得分:3)
是的,你是对的,请参阅JavaDoc了解更多信息:
只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。如果内部缓冲区溢出,它会自动变大。
答案 2 :(得分:2)
内部StringBuffer
使用char
数组来存储字符。容量是char
数组的初始大小。
可以从http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
找到更多信息答案 3 :(得分:2)
来自http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29
public int capacity()
返回当前容量。容量是新插入字符可用的存储量,超出该容量将进行分配。
同样来自同一份文件
从JDK 5发布版开始,这个类已经补充了一个设计用于单个线程StringBuilder的等效类。 StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
答案 4 :(得分:2)
取自官方J2SE文档
容量是新插入字符可用的存储量,超出该容量将进行分配。
它的长度通常是+ 16,这是最小分配,但是一旦字符数量,即它的大小超过分配的数量,StringBuffer也增加它的大小(按固定数量),但是将分配多少数量,我们无法计算出来。
答案 5 :(得分:2)
是的,就是这样。在这方面你可以认为StringBuffer
有点像Vector<char>
(除了显然你不能在Java中使用char
作为类型参数...)
答案 6 :(得分:2)
每个字符串缓冲区都有容量。只要长度了 字符串缓冲区中包含的字符序列不超过 容量,没有必要分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。
来自:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html
答案 7 :(得分:2)
StringBuffer有一个char [],在其中保存附加到它的字符串。当前分配给该缓冲区的内存量是容量。目前使用的金额是长度。
答案 8 :(得分:2)
这是内部缓冲区的大小。正如Javadoc所说:
每个字符串缓冲区都有容量。只要长度了 字符串缓冲区中包含的字符序列不超过 容量,没有必要分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。
答案 9 :(得分:1)
“每个字符串缓冲区都有容量。只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。如果内部缓冲区溢出,则自动变大。“
http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html -see capacity()和ensurecapacity()
答案 10 :(得分:1)
容量是新插入字符可用的存储量。它与length()不同。如果字符数小于16,则length()返回字符总数,容量返回值16。但是如果字符数超过16,则字符数为+16。 在这种情况下,没有字符= 17 SO,容量= 17 + 16 = 33
答案 11 :(得分:0)
伊万,刚刚阅读了capacity()的文档 - 它直接回答了你的问题......
答案 12 :(得分:0)
StringBuffer / StringBuilder类的初始容量为16。 如果您的String的长度变为> 16,这是第一次。 StringBuffer / StringBuilder类的容量增加到34,即[(16 * 2)+2]
但是当String的长度变为&gt; 34时,StringBuffer / StringBuilder类的容量将完全等于String的当前长度。
答案 13 :(得分:0)
答案已经为时已晚,但是希望这可能对某人有所帮助。
当我们使用StringBuffer的 default 构造函数时,分配的容量为 16
StringBuffer name = new StringBuffer();
System.out.println("capacity: " + name.capacity()); /*Output - 16*/
但是如果使用 String自变量,则StringBuffer的构造函数的容量计算如下所示
StringBuffer sb = new StringBuffer(String x);
容量=默认的StringBuffer容量+ x.length()
解决方案:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());
容量计算:容量= 16 + 17