public class stringBufferLength{
public static void main(string [] args){
string strbuff=new stringbuffer(5);
strbuff.append("abcd");
System.out.println(strbuff.length());
System.out.println(strbuff.capacity());
System.out.println(strbuff.tostring()+"**");
strbuff.setLength(10);
System.out.println(strbuff.length());
System.out.println(strbuff.capacity());第11行
System.out.println(strbuff.tostring("**"));
strbuff.setLength(3);
System.out.println(strbuff.length());
system.out.println(strbuff.capacity());//第15行
system.out.println(strbuff.tostring());
}
}请各位高手指点,为什么在第11行输出的不是10,第15行输出而不是3呢?
而都是12
非常感谢。

解决方案 »

  1.   

    这个相见AIP文档,里面说的很清楚。lz注意问题,请问11、15行都是那行呀?
      

  2.   

    长度和容量是2个概念,长度可以定义,容量则只能设置初始容量,当需要增长时容量会自动增长。
    这些在API中都有详细说明。
      

  3.   

    strbuff.capacity()返回当前容量。容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配。 再次分配的原则是旧容量的2倍+2
      

  4.   

    楼主理解错了,strbuff.setLength(10) 不是把stringbuffer的容量变量10,而是把字符串“abcd”的长度变成10,也就是“abcd      ”这时,字符串长度超过了原始长度5,所以strbuff自动扩容为原来的长度*2+2  , 也就是12。
    15行一个道理,你只是设置了里面字符串的长度,不是设置的strbuff的容量。
      

  5.   

    +1 楼主可看看 AbstractStringBuilder.java原码。
      

  6.   


    +1.多看看api和源码吧。。