Java中為什麼String在是不可變的?

為什麼String在Java中是不可變的是流行的面試問題之一。String是任何編程語言中最常用的類之一。String是Java中的不可變和final。Java運行時環境維護一個String池,使得String成為一個特殊的類。

為什麼String在Java中是不可變的?

下麵來看一下String不可變的一些好處,這將有助於理解為什麼StringJava中是不可變的。

  1. 因為String在Java中是不可變的。Java運行時環境可以節省大量的堆空間,因為不同的String變數可以引用池中的相同String變數。如果String不是不可變的,那麼String緩衝池失去作用,因為任何變數已經改變了值,它也會反映在其他變數中。

  2. 如果String是可變的,那麼它將對應用程式造成嚴重的安全威脅。例如,資料庫用戶名,密碼作為String傳遞以獲取資料庫連接,並在套接字編程主機和端口詳細資訊中作為String傳遞。由於String是不可變的,因此無法更改其值,否則任何駭客都可能更改引用的值以導致應用程式中出現安全問題。

  3. 由於String是不可變的,因此對於多線程是安全的。可以跨不同的線程共用單個String實例。這避免了使用同步來保證線程安全。字串是隱式線程安全的。

  4. 字串在java類加載器中使用,不可變性提供了安全性,類由Classloader加載。例如,假設嘗試加載java.sql.Connection類的實例,但引用的值更改為myhacked.Connection類,可以對數據庫執行不需要的操作。

  5. 由於String是不可變的,因此在創建時緩存它的哈希碼,不需要再次計算。這使得它成為Map中鍵的一個很好的候選者,它的處理速度比其他HashMap鍵對象快。這就是String是最廣泛用作HashMap鍵的原因。

以上是String是不可變的一些原因,它顯示了String不變性的好處。它是Java String類的一個很棒的特性,使它變得特別。


上一篇: java中方法重載和方法重寫的區別 下一篇:無