java中stringbuffer剖析

浏览了一个string与stringbuffer在添加n个字符串时的效率问题,忍不住翻了下源代码,string就不想多说了,final标示的,每次用“+”来连接新的字符串必须创建新的字符串对象,因此效率太低,

 

stringbuffer内部实用array实现,看一下扩容的方法,当append空间不够时,大小变为原来的2倍,然后用arraycopy复制。:

 

//数组扩容   
void expandCapacity(int minimumCapacity) {  
    //先扩容成 (原先的长度+1)*2  
    int newCapacity = (value.length + 1) * 2;  
    //判断newCapacity值是否满足要求  
     //如果新的长度还是不够,则直接取值 minimumCapacity   
    if (newCapacity < 0) {  
       newCapacity = Integer.MAX_VALUE;  
    } else if (minimumCapacity > newCapacity) {  
       newCapacity = minimumCapacity;  
    }     
    char newValue[] = new char[newCapacity];  
    //将原先的数据拷贝到新的char 数组中。  
     System.arraycopy(value, 0, newValue, 0, count);  
    value = newValue;  
}

你可能感兴趣的:(StringBuffer)