我注意到capacity方法返回StringBuilder容量,没有一种逻辑方式...有时它的值等于字符串长度,另一些时候它更大...
有没有一个方程式用来知道哪一个是它的逻辑?
发布于 2010-07-06 15:23:36
当您附加到StringBuilder时,会发生以下逻辑:
if (newCount > value.length) {
expandCapacity(newCount);
}其中newCount是所需的字符数,value.length是缓冲区的当前大小。
expandCapacity只是增加了后备char[]的大小
ensureCapacity()方法是调用expandCapacity()的公共方法,它的文档说:
确保容量至少等于指定的最小值。如果当前容量小于参数,则分配具有更大容量的新内部数组。新容量是以下各项中较大的一个:
argument.
如果minimumCapacity参数为非正参数,则此方法不执行任何操作,而只是返回。
发布于 2013-12-10 20:49:06
我将尝试用一些例子来解释这一点。
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb.length());
System.out.println(sb.capacity());
}
}length() -构建器中字符序列的长度,因为这个字符串构建器不包含任何内容,所以它的长度将为0。
capacity() -已分配的字符空间的数量。当你尝试构建一个空内容的字符串生成器时,默认情况下,它的初始化大小是0+16,所以length+16在这里会返回16。
注意: capacity()方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。
容量函数背后的逻辑:
您将新内容添加到stringbuilder对象,如果当前容量不足以获取新值,则它将增长(以前的
此分析取自actual StringBuilder.java code
发布于 2010-07-06 15:20:50
此函数执行的操作与您预期的不同-它给出了此StringBuilder实例内存此时可以容纳的最大字符数。
String Builder must read
https://stackoverflow.com/questions/3184244
复制相似问题