StringBuffer的长度是其容量的一部分?

时间:2016-07-30 13:29:10

标签: java

StringBuffer theString = new StringBuffer("0123456789ABCDEF");

在这种情况下:
长度= 16
容量= 32

但如果我追加16个字符:

theString.append("0123456789ABCDEF");

长度= 32
容量= 32

所以我很困惑,可以使用完整的缓冲区(因为我认为当我添加额外的16个字符时就会发生这种情况)或者从未到达缓冲区,因为它始终是除了长度?

3 个答案:

答案 0 :(得分:1)

以下是StringBuffer的java API,https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html,“每个字符串缓冲区都有容量。只要字符串缓冲区中包含的字符序列的长度不超过容量,就没有必要分配一个新的内部缓冲区数组。如果内部缓冲区溢出,它会自动变大。“因此,如果您添加更多字符,它将根据需要增加容量并增长。

答案 1 :(得分:0)

当您创建名为theString的StringBuffer对象时。 Java将为您分配32个字符容量。如果对象的长度超过32,则添加更多32个字符,因此容量也将变为64。所以你将得到32个容量,直到你的角色力量小于32

答案 2 :(得分:0)

初始化字符串缓冲区时,会发生什么情况,它会构造一个初始化为指定字符串内容的字符串缓冲区。字符串缓冲区的初始容量是16加上字符串参数的长度。所以你用16个字符初始化字符串缓冲区,容量为16 + 16 = 32。所以这意味着当你追加16个字符时,不需要扩展容量。请检查此link