StringBuffer   buffer   =   new   StringBuffer();   
        buffer.append('S');   
        buffer.append("tringBuffer");   
          
        System.out.println(buffer.charAt(1));   
        System.out.println(buffer.capacity());     
        System.out.println(buffer.indexOf("tring"));   
        System.out.println("buffer   =   "   +   buffer.toString());   //这段代码为什么是16 ? 不是创建buffer空对象就已经是16,然后应该是16+"StringBuffer"=28呀 StringBuffer buffer = new StringBuffer("wish");
System.out.println(buffer.toString());
System.out.println(buffer.length());
System.out.println(buffer.capacity());
buffer.setCharAt(0,'W');
buffer.append('!');
buffer.append(" Here we are!");
buffer.insert(0, "Hello ");
System.out.println(buffer.toString());//Hello Wish! Here we are!
System.out.println(buffer.length());//24
System.out.println(buffer.capacity());//24+16=40
//而这段应该是40啊   不懂  请高手指教

解决方案 »

  1.   

    你的理解错误
    //这段代码为什么是16 ? 不是创建buffer空对象就已经是16,然后应该是16+"StringBuffer"=28呀 
    new  StringBuffer();初始一个容量为16的StringBuffer对象
    append("tringBuffer");后,容量还是16,因为StringBuffer长度是12,没有超出16
    当字符串的长度大于16时,StringBuffer扩充为(原容量 + 1) * 2new StringBuffer("wish"); 
    容量为"wish"的长度 4+16 = 20;
    扩充容量 (20+1)* 2 = 42看看StringBuffer的源码,是通过一个char数组实现的
      

  2.   

    LS正解,看了一下源码,顺便给你贴一下StringBuffer extends AbstractStringBuilder
    public StringBuffer() {
    super(16);
        }//默认初始16
    public StringBuffer(String str) {
    super(str.length() + 16);
    append(str);
        }//另一种构造方式再看一下他的父类的源码
    abstract class AbstractStringBuilder implements Appendable, CharSequencechar value[];//内部维护一个char数组
    AbstractStringBuilder(int capacity) {
            value = new char[capacity];
        }void expandCapacity(int minimumCapacity) {
    int newCapacity = (value.length + 1) * 2;
            if (newCapacity < 0) {
                newCapacity = Integer.MAX_VALUE;
            } else if (minimumCapacity > newCapacity) {
        newCapacity = minimumCapacity;
    }
            value = Arrays.copyOf(value, newCapacity);
        }//扩充容量
      

  3.   

    非常正确。
    其实ArrayList,LinkedList都差不多,只是增量不一样而以。,楼主认真去理解吧。