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的当前长度。