xde*_*000 15 java stringbuilder capacity
我注意到该capacity方法在StringBuilder没有逻辑方式的情况下返回容量...有时它的值等于字符串长度,其他时间它更大......
知道哪个是逻辑的等式?
Boz*_*zho 13
附加到StringBuilder,会发生以下逻辑:
if (newCount > value.length) {
expandCapacity(newCount);
}
Run Code Online (Sandbox Code Playgroud)
where newCount所需的字符数,value.length是缓冲区的当前大小.
expandCapacity 只是增加了背衬的大小 char[]
该ensureCapacity()方法是公开的调用方式expandCapacity(),其文档说:
确保容量至少等于指定的最小值.如果当前容量小于参数,则分配具有更大容量的新内部阵列.新容量是更大的:
- minimumCapacity参数.
- 旧容量的两倍加2.
如果minimumCapacity参数是非正数,则此方法不执行任何操作,只返回.
use*_*551 12
我将尝试用一些例子来解释这一点.
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb.length());
System.out.println(sb.capacity());
}
}
Run Code Online (Sandbox Code Playgroud)
length() - 构建器中字符序列的长度,因为此stringbuilder不包含任何内容,其长度将为0.
capacity() - 已分配的字符空间数.当您尝试构造具有空内容的stringbuilder时,默认情况下,它将初始化大小设为length + 16,即0 + 16.因此容量将在这里返回16.
注意:capacity()方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加.
容量函数背后的逻辑: