浏览了一个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; }