爲何String要設計成不可變的?

1. 字符串常量池的須要面試

字符串常量池(String pool, String intern pool, String保留池) 是Java堆內存中一個特殊的存儲區域, 當建立一個String對象時,假如此字符串值已經存在於常量池中,則不會建立一個新的對象,而是引用已經存在的對象。倘若字符串對象容許改變,那麼將會致使各類邏輯錯誤,好比改變一個對象會影響到另外一個獨立對象. 嚴格來講,這種常量池的思想,是一種優化手段.緩存

2. 容許String對象緩存HashCode
Java中String對象的哈希碼被頻繁地使用, 好比在hashMap 等容器中。字符串不變性保證了hash碼的惟一性,所以能夠放心地進行緩存.這也是一種性能優化手段,意味着沒必要每次都去計算新的哈希碼.安全

3. 安全性
String被許多的Java類(庫)用來當作參數,例如 網絡鏈接地址URL,文件路徑path,還有反射機制所須要的String參數等, 倘若String不是固定不變的,將會引發各類安全隱患。性能優化

 整體來講, String不可變的緣由包括 設計考慮,效率優化問題,以及安全性這三大方面. 事實上,這也是Java面試中的許多 "爲何" 的答案。網絡

轉載連接:性能

https://blog.csdn.net/renfufei/article/details/16808775優化

相關文章
相關標籤/搜索