StringBuffer:java
StringBuffer是一個線程安全的可變字符序列。他的api和StringBuilder是差很少的。只不過,在多線程狀況下,StringBuilder是線程不安全的。api
StringBuffer比StringBuilder多2個成員變量:字節數組類型的toStringCache和java.io.ObjectStreamField數組類型的serialPersistentFields。數組
toStringCache用transient修飾,表示該字段不可序列化。他用於緩存toString最後一次返回的值,當修改的時候緩存會被清除。緩存
serialPersistentFields 用於序列化的,序列化value,count,shared。安全
StringBuffer無參構造方法,默認初始化值爲16.多線程
StringBuffer本身重寫了length和capacity方法。ui
StringBuffer的擴容用的是父類的AbstractStringBuilder的擴容方法:線程
StringBuffer線程安全,是由於不少方法都加了syncronized修飾。blog
StringBuffer和StringBuilder的對比:接口
1.StringBuilder是jdk1.5出現的,在多線程狀況下,是線程不安全的;
2.StringBuffer是jdk1.0出現的,是線程安全的;
3.在線程安全的狀況下,推薦使用StringBuilder,這樣效率更高。
看一下二者的序列化部分:
StringBuilder:
StringBuffer:
爲何他們的序列化須要這writeObject和readObject方法,而咱們在實際運行中只用實現Serializable接口?