Maison > Questions et réponses > le corps du texte
StringBuffer str=new StringBuffer();
StringBuffer str1=new StringBuffer(3);
System.out.println(str.capacity()); //16
System.out.println(str1.capacity()); //8
为什么str1.capacity的结果是8?
伊谢尔伦2017-04-18 09:23:15
Vous avez peut-être fait une erreur, le résultat devrait être :
16
3
Regardez le code source :
// minimumCapacity是当前已经存储的字符长度+要追加的字符长度
// value.length 是当前容量
// 所以新容量=max(2*旧容量+2,追加后的字符长度)
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity - minimumCapacity < 0)
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
value = Arrays.copyOf(value, newCapacity);
}
La capacité ne sera étendue que lors de l'ajout. Lors de l'initialisation, en plus de la valeur par défaut de 16, elle peut être définie sur n'importe quel nombre.
怪我咯2017-04-18 09:23:15
给你看JDK 1.8中的构造方法:
StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder:
public StringBuffer() {
super(16);
}
public StringBuffer(int capacity) {
super(capacity);
}
AbstractStringBuilder的构造方法:
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
ringa_lee2017-04-18 09:23:15
Exécutez ici pour voir la compilation et l'exécution de Java en ligne. Environnement d'exécution : java v1.7.0_80
.