素材牛VIP会员
StringBuffer的capacity()方法
 th***as  分类:Java代码  人气:1192  回帖:3  发布于6年前 收藏

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

 标签:eclipsejava

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv3 码奴
谁***的 交互设计师 6年前#1
给你看JDK 1.8中的构造方法:
StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder:
public StringBuffer() {
    super(16);
}
public StringBuffer(int capacity) {
    super(capacity);
}
AbstractStringBuilder的构造方法:
AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}      
Lv3 码奴
馨***2 移动开发工程师 6年前#2

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

Lv6 码匠
蜗***跑 产品经理 6年前#3

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

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取