代码之家  ›  专栏  ›  技术社区  ›  user8562091

StringBuilder中length()和capacity()方法之间的差异

  •  5
  • user8562091  · 技术社区  · 7 年前

    capacity() 方法不同于 length() StringBuilder StringBuffer 课程。

    我搜索了堆栈溢出并设法找到了 this 回答,但我不明白它与 长度() this 网站也一样,但这对我帮助更少。

    2 回复  |  直到 7 年前
        1
  •  9
  •   T.J. Crowder    7 年前

    StringBuilder 用于建立文本。在内部,它使用一个字符数组来保存添加到其中的文本。 capacity length 是该数组中当前由应使用的文本填充的数量。因此:

    StringBuilder sb = new StringBuilder(1000);
    sb.append("testing");
    

    capacity() 是1000(在需要用更大的数组替换内部数组之前,可以容纳1000个字符),并且 length()

    容量很重要,因为如果您尝试向 字符串拼接 当前为16个字符(未记录,可能会更改),因此:

    StringBuilder sb = new StringBuilder();
    sb.append("Singing:");
    sb.append("I am the very model of a modern Major General");
    

    ...创建 char[16] ,份 "Singing:" 然后必须创建一个 数组并将内容复制到其中,然后再添加第二个字符串,因为它没有足够的空间添加第二个字符串。


    (是否 事项 取决于代码正在执行的操作)

        2
  •  3
  •   user7571182 user7571182    7 年前

    实际尺寸 它目前可以适应。

    如果添加更多字符以超过其容量,则生成器容量将自动增加。在内部,字符串生成器是一个字符数组,因此生成器容量是数组的大小。如果超出构建器容量,则用新阵列替换阵列。新阵列大小为 2 * (the previous array size + 1) .

    您可以使用 newStringBuilder(initialCapacity) trimToSize()

    我尽量用最好的术语解释它,所以我希望它能有所帮助。