一、字符串池的需求java
字符串池是方法区(Method Area)中的一块特殊的存储区域。当一个字符串已经被建立而且该字符串在 池 中,该字符串的引用会当即返回给变量,而不是从新建立一个字符串再将引用返回给变量。若是字符串不是不可变的,那么改变一个引用(如: string2)的字符串将会致使另外一个引用(如: string1)出现脏数据。缓存
二、容许字符串缓存哈希码安全
在java中经常会用到字符串的哈希码,例如: HashMap 。String的不变性保证哈希码始终一,所以,他能够不用担忧变化的出现。 这种方法意味着没必要每次使用时都从新计算一次哈希码——这样,效率会高不少。网络
三、安全字符串
String普遍的用于java 类中的参数,如:网络链接(Network connetion),打开文件(opening files )等等。若是String不是不可变的,网络链接、文件将会被改变——这将会致使一系列的安全威胁。操做的方法本觉得链接上了一台机器,但实际上却不是。因为反射中的参数都是字符串,一样,也会引发一系列的安全问题string