1、运行速度比较:
- StringBuilder > StringBuffer(线程安全) > String
2、String类是不可变类(final修饰),封装的不可变数组
- 所有字符都是存储在这个final 类型的char数组中
- 字符串操作,返回的结果是重新new出来的对象
3、 StringBuffer类封装的是可变数组,并且线程安全
4、StringBuilder类是非线程安全、可变字符串封装类
5、抽象类AbstractStringBuilder
- StringBuffer和StringBuilder都继承自这个抽象类
- StringBuilder和StringBuffer的方法实现基本上一致
- 不同的是StringBuffer类的方法前多了个synchronized关键字
6、StringBuilder和StringBuffer
- append,insert,delete方法最根本上都是调用System.arraycopy()
- substring(int, int)方法是通过重新new String()::StringBuilder和String没区别
- 二者大部分方法均调用父类AbstractStringBuilder的实现
- 扩容机制首先是把容量变为原来容量的2倍加2
- StringBuilder和StringBuffer的默认容量都是16,预先估计好字符串的大小避免扩容时间消耗
7、System.arraycopy()
/**
*src:源数组;
*srcPos:源数组要复制的起始位置;
*dest:目的数组;
*destPos:目的数组放置的起始位置;
*length:复制的长度。
*注意:src and dest都必须是同类型或者可以进行转换类型的数组.
*/
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)