為什麼String在Java中是不可變的是流行的面試問題之一。String
是任何程式設計語言中最常用的類之一。String
是Java中的不可變和final
。Java執行時環境維護一個String
池,使得String
成為一個特殊的類。
為什麼String在Java中是不可變的?
下面來看一下String
不可變的一些好處,這將有助於理解為什麼String
在Java中是不可變的。
因為String在Java中是不可變的。Java執行時環境可以節省大量的堆空間,因為不同的String
變數可以參照池中的相同String
變數。如果String
不是不可變的,那麼String緩衝池失去作用,因為任何變數已經改變了值,它也會反映在其他變數中。
如果String是可變的,那麼它將對應用程式造成嚴重的安全威脅。例如,資料庫使用者名,密碼作為String
傳遞以獲取資料庫連線,並在通訊端程式設計主機和埠詳細資訊中作為String
傳遞。由於String
是不可變的,因此無法更改其值,否則任何駭客都可能更改參照的值以導致應用程式中出現安全問題。
由於String
是不可變的,因此對於多執行緒是安全的。可以跨不同的執行緒共用單個String
範例。這避免了使用同步來保證執行緒安全。字串是隱式執行緒安全的。
字串在java類載入器中使用,不可變性提供了安全性,類由Classloader
載入。例如,假設嘗試載入java.sql.Connection
類的範例,但參照的值更改為myhacked.Connection
類,可以對資料庫執行不需要的操作。
由於String
是不可變的,因此在建立時快取它的雜湊碼,不需要再次計算。這使得它成為Map中鍵的一個很好的候選者,它的處理速度比其他HashMap
鍵物件快。這就是String是最廣泛用作HashMap
鍵的原因。
以上是String
是不可變的一些原因,它顯示了String
不變性的好處。它是Java String類的一個很棒的特性,使它變得特別。