java - StringBuilder中length()和capacity()方法的区别

标签 java stringbuilder stringbuffer

我试图弄清楚何时使用或为什么使用 capacity()方法与length()不同方法StringBuilderStringBuffer类。

我在 Stack Overflow 上搜索并设法找到 this答案,但我不明白它与 length() 的区别方法。我访问过this网站也有,但这对我的帮助就更少了。

最佳答案

StringBuilder 用于构建文本。在内部,它使用字符数组来保存您添加到其中的文本。 capacity 是数组的大小。 length 是当前应使用的文本填充该数组的多少。所以:

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

capacity() 为 1000(内部数组需要替换为更大的数组之前还有 1000 个字符的空间),length() 为 7(有是数组中七个有意义的字符)。

容量很重要,因为如果您尝试向 StringBuilder 添加超出其容量的文本,它必须分配一个新的、更大的缓冲区并将内容复制到其中,该缓冲区具有内存使用和性能影响*。例如,StringBuilder 的默认容量当前为 16 个字符(未记录且可能会更改),因此:

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

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

<小时/>

* (是否重要取决于代码的作用)

关于java - StringBuilder中length()和capacity()方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46071465/

相关文章:

java - 测试 StringBuilder 和 StringBuffer 之间的区别

java - 在给定特定开始和结束位置的情况下构建 String 的好方法是什么?

java - NullPointerException 为 "getSupportActionBar().setDisplayHomeAsUpEnabled( true )"?

java - 有没有办法处理 LinkedHashMap 中相同的值?

groovy - Groovy文字StringBuilder/StringBuffer

c# - 这个基本 Java 方法的等效 C# 方法是什么?

Java - Hangman 游戏 - StringBuffer 变量上的 charAt 问题

java - for 循环中的 String.charAt(i) 在 Java 中不起作用

java - 使用泛型来替换特定的类类型

java - 如果编译器自动将字符串连接转换为 StringBuilder,为什么要显式使用 StringBuilder?