找了些资料看了下,差不多也是这个意思。就其原因是因为函数:ensureCapacity( )和 expandCapacity( )进行了控制 
 
public   synchronized   void  ensureCapacity( int  minimumCapacity) { 
       if  (minimumCapacity  >  value.length) { 
// 当设置StringBuffer的容量小于当前容量时,容量不变。  
            expandCapacity(minimumCapacity); 
      } 
} 
 
private   void  expandCapacity( int  minimumCapacity) { 
      int  newCapacity  =  (value.length  +   1 )  *   2 ; 
      if  (newCapacity  <   0 ) { 
            newCapacity  =  Integer.MAX_VALUE; 
      }  else   if  (minimumCapacity  >  newCapacity) { 
      // 当设置StringBuffer的容量大于(当前容量+1)*2,则容量变为用户所设置的容量。 
      // 否则,容量为(当前容量+1)*2,即newCapacity  
            newCapacity  =  minimumCapacity; 
      } 
  
char  newValue[]  =   new   char [newCapacity]; 
System.arraycopy(value,  0 , newValue,  0 , count); 
value  =  newValue; 
shared  =   false ; 
}  |