首頁  >  文章  >  Java  >  淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

青灯夜游
青灯夜游轉載
2019-11-27 17:15:541779瀏覽

在Java開發面試常常會被問到String,StringBuider,StringBuffer區別,很多人回答不夠全面和深入,那麼它們到底都有什麼差別呢!

淺談String、StringBuffer和StringBuilder的差別

三者都是用來對字串進行操作,String通常用來定義一個變量,而StringBuilder StringBuffer則通常用來對字串進行拼接等操作。但其實String同樣的可以用來拼接字串,但我們為什麼很少用呢,這樣從三者的底層程式碼說起。

淺談String、StringBuffer和StringBuilder的差別

String的底層程式碼為一個用final修飾的char數組,這表示定義一個String變數以後,變數的內容是不可變的。

淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

#StringBuilder 與StringBuffer都繼承自AbstractStringBuilder,該類別的char陣列並沒有用final修飾,內容是可變的,這是什麼意思呢。

例如:

String s1= "a";
String s2 = new String("b") ;
String s3 = s1+s2;

如果這樣,我們得到「ab」這個字串,因為String底層未不可變的字串,所以會建立三個對象,都會佔用內存,而這三個物件一直都沒有失去引用,所以jvm無法垃圾回收,造成記憶體資源的大量浪費,這在我們開發中是不推崇的,而StringBuilder 與StringBuffer則不存在這樣的問題。

淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

#透過底層程式碼我們可以看到StringBuilder 與StringBuffer在拼接字串時,透過判斷字串長度是否足夠,從而創建一個新的數組用來封裝數據,而原來的物件被放棄引用,等待垃圾回收,從而減少記憶體的浪費,因此在拼接字串等操作時,我們通常使用StringBuilder 與StringBuffer,但兩者在執行效率上又有不同,StringBuilder的執行效率較高,這是為什麼呢?

淺談String、StringBuffer和StringBuilder的差別

淺談String、StringBuffer和StringBuilder的差別

透過底層原始碼,可以發現StringBuffer在拼接字串時,使用了同步鎖,安全性提高,而StringBuilder則未使用同步鎖,故效率提高。

現在應該要弄清楚他們三者之間的差別了吧! !

本文來自 java入門 欄目,歡迎學習!

以上是淺談String、StringBuffer和StringBuilder的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:源码时代。如有侵權,請聯絡admin@php.cn刪除