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