不可變對象
對象被完全創(chuàng)建之后,對象的內部狀態(tài)不能被改變;基本數據類型的值不能改變,引用類型的變量不能指向其他的對象,引用類型指向的對象狀態(tài)也吧能改
1、String,StringBuilder,StringBuffer 內部都是用char[]數組來實現;
從實際應用可能的場景中分析String,StringBuilder,StringBuffer產生的背景
實際應用我們對字符串的操作做出如下幾種操作:插入,刪除,修改,拼接,截取,查找,替換;
String 源代碼char[]是final,所以對字符串的操作;中間會新建臨時變量,對字符串的操作不會影響原來的字符串;操作完成返回的是一個新字符串對象
2、StringBuffer和StringBuidler 封裝的是可變數組,可變字符序列;對字符串的操作不會產生新的對象;他們都是繼承AbstractStringBuilder,他們對數組的操作方法實現是一樣的,只是StringBuffer的方法上
加了synchronized關建字;內部對char數組的操作都是通過System.arraycopy完成
3、StringBuffer 因為方法上加了synchronized關鍵字,所以對象是線程安全的,所以效率低;多線程環(huán)境下使用
4、String 是不可變對象,所以也是線程安全的,字符少量情況下使用
5、StringBuidler 不是線程安全的,在非多線程環(huán)境下使用,效率高