- String pool 是存储在Method Area的一个独特区域,当一个string被创建时,如果他已经存在于pool中,已存在的string的引用将会被返回。
例如:
String string1 = "abcd";
String string2 = "abcd";

如果string是可变的,改变string会导致其他值的引用出错。
注:Method Area

详解见: JVM Run-Time Data Areas
-
缓存hashcode
字符串的hashcode在Java中经常使用。例如,在HashMap或HashSet中。不可变保证了hashcode总是相同的,这样就可以兑现它,而不必担心更改。这意味着,不需要每次使用hashcode时都计算它。这样更有效率。 -
安全性
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
4.线程安全
因为不可变对象不能被改变,所以它们可以在多个线程之间自由共享。这消除了执行同步的需求。
网友评论