【问题标题】:StringBuffer capacity()字符串缓冲区容量()
【发布时间】:2016-10-22 10:32:27
【问题描述】:
public static void main(String args[]){
  StringBuilder sb=new StringBuilder();

    System.out.println(sb.capacity());
    sb.append("abcabcabcabcabcabcab");
    System.out.println(sb.length());
    System.out.println(sb.capacity());
    System.out.println("-----");
    sb.append("abcabcabcabcabcabcab");
    System.out.println(sb.length());
    System.out.println(sb.capacity());
    System.out.println("-----");
    sb.trimToSize();
    System.out.println(sb.capacity());
    System.out.println(sb.length());
}

o/p 是

16
20
34
-----
40
70
-----
40
40

我的问题是,在第二行,容量应该是 36(20+16)。为什么显示为 34。

【问题讨论】:

标签: java stringbuffer capacity


【解决方案1】:

查看 Javadoc,我认为 StringBuilder 并没有具体说明它将如何增长,但最有可能发生的是,一旦它必须增长,它就会调用 ensureCapacity(minimumCapacity) 记录在案:

新容量是以下两者中的较大者:

  • minimumCapacity 参数。
  • 旧容量的两倍,加上 2。

所以你从最初的 16 到

  • 新长度 (20)
  • 或当前容量的两倍 (16) 加上 2

最终是 34 岁。

但同样,这可能是特定于实现的,而不是您应该依赖(或需要关心)的东西。

【讨论】:

  • 但是在另一行追加新文本后,它的长度变成了40,现在为什么显示容量为70?
  • @RuchiGupta:旧容量 = 34,新容量 = (34 * 2) + 2 = 70。哪里搞错了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多