Heim  >  Fragen und Antworten  >  Hauptteil

java - StringBuffer的capacity()方法

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中文网2741 Tage vor503

Antworte allen(3)Ich werde antworten

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:23:15

    你可能搞错了,输出结果应该是:

    16
    3
    

    瞧瞧源码:

        // 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);
        }

    只是在追加的时候会扩展容量,初始化时除了默认是16外,设多少就是多少。

    Antwort
    0
  • 怪我咯

    怪我咯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];
    }      
    

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-18 09:23:15

    这里运行看看 Java在线编译执行 运行环境: java v1.7.0_80

    Antwort
    0
  • StornierenAntwort