String使用final修飾的好處
阿新 • • 發佈:2019-02-11
String
概述
String 類被宣告成final型別,不能被繼承
通過char陣列儲存資料,value陣列被final修飾,在value初始化完成後不能被其他陣列引用,在String類方法中沒有改變陣列的方法,確保String不可變
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
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 ,StringBuiler比較
1可變性
- String是不可變的,
- StringBuffer 和 StringBuilder是可變的
2執行緒安全性
- String是不可變的,保證了執行緒的安全性
- StringBuilder是執行緒不安全的
- StringBuffer由於有synchronized修飾,所以是執行緒安全的