StringBuffer的容量是多少?

当我运行此代码时:

StringBuffer name = new StringBuffer("stackoverflow.com"); System.out.println("Length: " + name.length() + ", capacity: " + name.capacity()); 

它给出了输出:

长度:17,容量:33

明显的长度与字符串中的字符数有关,但我不确定容量是多少? 在重新分配空间之前,StringBuffer可以容纳的字符数是多少?

请参阅: JavaSE 6 java.lang.StringBuffer capacity()

但你的假设是正确的:

容量是新插入字符可用的存储量,超出该容量将进行分配

是的,你是对的,请参阅JavaDoc以获取更多信息:

只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。

内部StringBuffer使用char数组来存储字符。 容量是该char数组的初始大小。

可以在http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html找到更多信息。

来自http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29

public int capacity()

返回当前容量。 容量是新插入字符可用的存储量,超出该容量将进行分配。

也来自同一份文件

从JDK 5发行版开始,这个类已经补充了一个等效类,专门用于单个线程StringBuilder。 StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

是的,就是这样。 在这方面你可以认为StringBuffer有点像Vector (除了显然你不能在Java中使用char作为类型参数…)

每个字符串缓冲区都有容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。

来自: http : //download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html

StringBuffer有一个char [],在其中保存附加到它的字符串。 当前分配给该缓冲区的内存量是容量。 目前使用的金额是长度。

它是内部缓冲区的大小。 正如Javadoc所说:

每个字符串缓冲区都有容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。

取自官方J2SE文档

容量是新插入字符可用的存储量,超出该容量将进行分配。

它的一般长度为+ 16,这是最小分配,但是一旦字符数量即其大小超过分配的数量,StringBuffer也会增加其大小(按固定金额),但是将分配多少金额,我们不能计算它。

“每个字符串缓冲区都有一个容量。只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。如果内部缓冲区溢出,则自动生成大“。

http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html-see capacity()和ensurecapacity()

容量是新插入字符可用的存储量。它与length()不同。如果字符数小于16,则length()返回字符总数,容量返回值16.But如果是字符数超过16容量是字符数+16。在这种情况下,字符数不是= 17 SO,容量= 17 + 16 = 33

Ivan,刚刚阅读了capacity()的文档 – 它直接回答了你的问题……

StringBuffer / StringBuilder类的初始容量为16.这是第一次,如果String的长度变为> 16。 StringBuffer / StringBuilder类的容量增加到34即[(16 * 2)+2]

但是当String的长度变为> 34时,StringBuffer / StringBuilder类的容量将完全等于String的当前长度。