3

私はこのクラスのソースコードを調べていて、によって呼び出されるappendメソッドから始めましたStringBUffer.append();

public AbstractStringBuilder append(String str) {
   if (str == null) str = "null";
       int len = str.length();
   if (len == 0) return this;
   int newCount = count + len;
   if (newCount > value.length)
      expandCapacity(newCount); // newcount is the new volumn of a char array
    str.getChars(0, len, value, count);
    count = newCount;
    return this;
  }

enpandCapacityそれから私は方法に深く入りました

void expandCapacity(int minimumCapacity) {
    int newCapacity = (value.length + 1) * 2; //here value is a char array 
    if (newCapacity < 0) { // Why is newCapacity less than 0?
                           // Is that possible? When it will be possible?
        newCapacity = Integer.MAX_VALUE;
    } else if (minimumCapacity > newCapacity) {
        newCapacity = minimumCapacity;
    }
    value = Arrays.copyOf(value, newCapacity);
}

なぜnewCapacity0 より小さいのですか? それは可能ですか?いつそれが可能になりますか?

4

1 に答える 1

3

はい; 符号付き整数は、int型の最大値(2 ^ 31-1)を超えると負になる可能性があります。あなたが見てみると、彼らは本質的にで容量を制限していInteger.MAX_VALUEます。ここで同様のタイプの質問。

于 2012-09-05T02:51:42.573 に答える