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

2019-10-16 22:23:35

為什麼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類的一個很棒的特性,使它變得特別。