一、运行速度比较:java
- StringBuilder > StringBuffer(线程安全) > String
二、String类是不可变类(final修饰),封装的不可变数组数组
- 全部字符都是存储在这个final 类型的char数组中
- 字符串操做,返回的结果是从新new出来的对象

三、 StringBuffer类封装的是可变数组,而且线程安全安全
四、StringBuilder类是非线程安全、可变字符串封装类app
五、抽象类AbstractStringBuilderui
- StringBuffer和StringBuilder都继承自这个抽象类
- StringBuilder和StringBuffer的方法实现基本上一致
- 不一样的是StringBuffer类的方法前多了个synchronized关键字

六、StringBuilder和StringBuffer线程
- append,insert,delete方法最根本上都是调用System.arraycopy()
- substring(int, int)方法是经过从新new String()::StringBuilder和String没区别
- 两者大部分方法均调用父类AbstractStringBuilder的实现
- 扩容机制首先是把容量变为原来容量的2倍加2
- StringBuilder和StringBuffer的默认容量都是16,预先估计好字符串的大小避免扩容时间消耗
七、System.arraycopy()code
/**
*src:源数组;
*srcPos:源数组要复制的起始位置;
*dest:目的数组;
*destPos:目的数组放置的起始位置;
*length:复制的长度。
*注意:src and dest都必须是同类型或者能够进行转换类型的数组.
*/
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)