Java 從源碼角度理解String StringBuffer StringBuilder 的區(qū)別


不可變對象

對象被完全創(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)境下使用,效率高

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容