我试图弄清楚何时使用或为什么使用 capacity()
方法与length()
不同方法StringBuilder
或StringBuffer
类。
我在 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/