關于String,StringBuffer和StringBuilder詳細討論

String

  • 為什么要設計成final

Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.

字符串是恒定的,創建之后它們的值不能被改變。StringBuffer是可變的strings.字符串對象不可變讓它們可以被共享。
String a = "hello";
a = "world"
如下圖,僅僅是將引用指向成了另一個常量,而原來的hello并沒有改變。


字符串轉換.png

*String使用final修飾的好處
此處有一篇帖子講的比較詳細,清楚,在此引用一下
String使用final修飾的好處

  • String不可變優點

1方便做hash中的key
因為 String 的 hash 值經常被使用,例如 String 用做 HashMap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進行一次計算。
2String pool的需要
如果String被創建了,從String pool中直接獲取引用,只要String 不改變,才能從String pool獲取
3安全性
String 經常作為參數,String 不可變性可以保證參數不可變。例如在作為網絡連接參數的情況下如果 String 是可變的,那么在網絡連接過程中,String 被改變,改變 String 對象的那一方以為現在連接的是其它主機,而實際情況卻不一定是。
4線程安全
String 不可變性天生具備線程安全,可以在多個線程中安全地使用。

  • String,StringBuffer,StringBuilder三者的對比
String
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容