public static void main(String args[])
    {
      StringBuffer str=new StringBuffer();
       str.append("大家好");
       System.out.println("str:"+str);
      System.out.println("length:"+str.length());
       System.out.println("capacity:"+str.capacity()); 

此结果运行结果为:str:大家好
                  length:3
                  capacity:16
当我把str.append("大家好")改为str.append("大家好,我们大家都很愿意学习Java语言")时,结果为
                  str:大家好,我们大家都很愿意学习Java语言
                  length:20
                  capacity:34 (请问此处为何是34呢?)

解决方案 »

  1.   


    public StringBuffer() {
    super(16);//默认capacity为16
        }public AbstractStringBuilder append(String str) {
    if (str == null) str = "null";
            int len = str.length();
    if (len == 0) return this;
    int newCount = count + len;
    if (newCount > value.length)
        expandCapacity(newCount);
    str.getChars(0, len, value, count);
    count = newCount;
    return this;
        }void expandCapacity(int minimumCapacity) {
    int newCapacity = (value.length + 1) * 2;//在扩展capacity时(16+1)*2=34
            if (newCapacity < 0) {
                newCapacity = Integer.MAX_VALUE;
            } else if (minimumCapacity > newCapacity) {
        newCapacity = minimumCapacity;
    }
            value = Arrays.copyOf(value, newCapacity);
        }
      

  2.   

    我昨天刚看的这个源码,MARK一下
      

  3.   

    对于StringBuffer来说,容量不够时会按照其自身规则自动扩充,如果提前知道最大的字符串长度,最好一开始都指定好capacity