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