一、運行速度比較:java
- StringBuilder > StringBuffer(線程安全) > String
二、String類是不可變類(final修飾),封裝的不可變數組數組
- 全部字符都是存儲在這個final 類型的char數組中
- 字符串操做,返回的結果是從新new出來的對象
![](http://static.javashuo.com/static/loading.gif)
三、 StringBuffer類封裝的是可變數組,而且線程安全安全
四、StringBuilder類是非線程安全、可變字符串封裝類app
五、抽象類AbstractStringBuilderui
- StringBuffer和StringBuilder都繼承自這個抽象類
- StringBuilder和StringBuffer的方法實現基本上一致
- 不一樣的是StringBuffer類的方法前多了個synchronized關鍵字
![](http://static.javashuo.com/static/loading.gif)
六、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)