为了账号安全,请及时绑定邮箱和手机立即绑定

StringBuffer的capacity()方法

StringBuffer的capacity()方法

斯蒂芬大帝 2019-03-20 18:14:56
StringBuffer str=new StringBuffer();StringBuffer str1=new StringBuffer(3);System.out.println(str.capacity()); //16System.out.println(str1.capacity()); //8为什么str1.capacity的结果是8?
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

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


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外,设多少就是多少。


查看完整回答
反对 回复 2019-04-20
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

给你看JDK 1.8中的构造方法:

StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder:

public StringBuffer() {

    super(16);

}

public StringBuffer(int capacity) {

    super(capacity);

}

AbstractStringBuilder的构造方法:

AbstractStringBuilder(int capacity) {

    value = new char[capacity];

}      


查看完整回答
反对 回复 2019-04-20
  • 3 回答
  • 0 关注
  • 1083 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号