1. 程式人生 > >讀String、StringBuffer、StringBuilder原始碼筆記

讀String、StringBuffer、StringBuilder原始碼筆記

String類

1,首先String類實現了Serializable、Comparable、CharSequence三個介面,分別表示String可以被序列化、實現了Comparable介面的compareTo方法,在集合中可以被排序,實現了CharSequence介面的方法。

2,String類重寫了Object的euqals()方法和hashCode()方法,可以作為HashMap的key(如果把自定義的類作為HashMap的值一定要重寫equals()和hashCode()方法)。equals()方法比較了每個字元陣列的元素,所以元素都相等時方法返回true;hashCode()方法的解釋:

https://blog.csdn.net/claram/article/details/53770830

3,String類被final修飾,不可以被繼承,所以每次為引用賦新值就會產生一個新的常量或者物件。如果想修改字串不產生新的物件,請使用StringBuffer或者StringBuilder.

4,String的內部實現是Char陣列,Char陣列被final修飾,所以不可被改變;

5,String的預設是是null,一般引用型別的預設是都是null。

StringBuffer和StringBuilder

1,StringBuffer和StringBuilder都實現了AbstractStringBuilder、Serializable、CharSequence;

2,二者都是用了Char陣列,和String不同的是沒有用final修飾,因為是可以修改的;

3,StringBuffer使用了Synchronized保證了執行緒安全 ,StringBuilder則沒有保證執行緒安全,所以StringBuffer在多執行緒下的效率低於StringBuilder。

4,StringBuffer比StringBuilder多了個toStringCache屬性,在呼叫同String方法時作為快取。

5,初始容量都是16,擴容機制都是“舊容量*2+2”.