Java StringBuffer附加分配

Nul*_*x00 4 java stringbuffer

在java中使用StringBuffer时,我想知道在需要重新分配空间时如何实现append函数.

例如,如果我追加一个比当前分配的空间更长的字符串,它如何在方法的细节中管理它?

doo*_*bop 5

源代码包含在JDK下载中.只需查找src.zip文件(我的是Program Files(x86)\ Java\jdk1.6.0_01\src.zip).解压后,只需转到java/lang,就可以检查StringBuffer.java,StringBuilder.java和AbstractStringBuilder.java.

在此实现中,AbstractStringBuilder中的"expandCapacity"看起来像计算容量并执行Arrays.copyOf()来扩展缓冲区.值得注意的是,第一次检查是<0以防止溢出情况.

void expandCapacity(int minimumCapacity) {
    int newCapacity = (value.length + 1) * 2;
    if (newCapacity < 0) {
        newCapacity = Integer.MAX_VALUE;
    } else if (minimumCapacity > newCapacity) {
        newCapacity = minimumCapacity;
    }
    value = Arrays.copyOf(value, newCapacity);
}
Run Code Online (Sandbox Code Playgroud)

  • IE - 容量不断增加.这使得Append的摊余成本保持不变(代价是可能将缓冲区空间的一半留空). (3认同)