java - StringBuffer的capacity()方法
PHP中文网
PHP中文网 2017-04-18 09:21:15
0
3
531

StringBuffer str=new StringBuffer();
StringBuffer str1=new StringBuffer(3);
System.out.println(str.capacity()); //16
System.out.println(str1.capacity()); //8
为什么str1.capacity的结果是8?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(3)
伊谢尔伦

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.

刘奇
给你看JDK 1.8中的构造方法:
StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder:
public StringBuffer() {
    super(16);
}
public StringBuffer(int capacity) {
    super(capacity);
}
AbstractStringBuilder的构造方法:
AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}      
左手右手慢动作

Exécutez ici pour voir la compilation et l'exécution de Java en ligne. Environnement d'exécution : java v1.7.0_80

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal