String是不可变化的字符,StringBuilder是可以变化的字符。String的不可变是由于它的底层是一个private final char[],没有方法可以修改它的值,所以它是不可变化,而StringBuilder底层也是一个char[],修饰符是缺省的,同包类都可以修改它,所以StringBuilder是一个可变的字符。StringBuilder可以通过append,insert来修改char[]的值。append追加一个字符,如果char[]容量不够,先会进行一个初始容量*2+2的扩容,把追加的字符放到char[]的末端,通过
String的getChars(追加的字符数组,srcBegin从哪个下标开始,des添加到哪个数组后面,count加到到目的数组的后边)方法。getChars方法里面其实调用的是System.arrayCopy(value,srcBegin,des,count,value.length-srcBegin);insert(int index,String str)在哪个下标处插入一个str字符。首先也会检查下初始长度够不够,不够就扩容,然后在通过System.arrayCopy(原数组,index,目的数组,index+str.length,count-index向后移动的长度);原数组从index开始复制count-index个长度到目的数组并从index+str下标开始。在调用插入字符的getChars(index,len,des,index)调用此方法来替换掉dec数组中的index到index+len的值为str的值