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