一、字符串池的需求java
字符串池是方法區(Method Area)中的一塊特殊的存儲區域。當一個字符串已經被建立而且該字符串在 池 中,該字符串的引用會當即返回給變量,而不是從新建立一個字符串再將引用返回給變量。若是字符串不是不可變的,那麼改變一個引用(如: string2)的字符串將會致使另外一個引用(如: string1)出現髒數據。緩存
二、容許字符串緩存哈希碼安全
在java中經常會用到字符串的哈希碼,例如: HashMap 。String的不變性保證哈希碼始終一,所以,他能夠不用擔憂變化的出現。 這種方法意味着沒必要每次使用時都從新計算一次哈希碼——這樣,效率會高不少。網絡
三、安全字符串
String普遍的用於java 類中的參數,如:網絡鏈接(Network connetion),打開文件(opening files )等等。若是String不是不可變的,網絡鏈接、文件將會被改變——這將會致使一系列的安全威脅。操做的方法本覺得鏈接上了一臺機器,但實際上卻不是。因爲反射中的參數都是字符串,一樣,也會引發一系列的安全問題string