博客 / 詳情

返回

為什麼String是不可變的

簡介

String是最常用的類之一,可為什麼它要設計成不可變的呢。在面向對象的世界裏,不可變指的是是指一旦一個對象完成它的構造過程,這個實例就無法被改變了。
在java和C#等語言中,String是不可變的

不可變的好處

類加載

String被用作類加載的參數,試想一下當String為可變的話會發生什麼,它的值會被篡改,繼而就會加載錯誤的類。不可變的特性提供了安全去加載準確的類。例如,我們想要去加載com.amberke.PasswordAuth來校驗密碼,但是它所指向的值可能被改成了com.hack.PasswordHacker。

線程安全

不可變已經隱式地使String變得線程安全了,沒必要額外地在多線程中使用synchronization 去實現線程安全。

HashMap Key的理想類型

String常常用作HashMap Key的類型,正因為它是不可變的,它的hashcode創建的時候就已經有了,不需要再去計算值了。

堆空間

不可變可以節省掉許多堆的空間佔用,因為如果創建了值一樣的不同的String變量,它們會指向同一個字符串對象,也就是在內存中其實只有一份存在。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.