-
字符串常量池需要String不可变。因为String设计成不可变,当创建一个String对象时,若此字符串已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象。如果字符串变量允许改变,会导致各种逻辑错误,如改变一个对象会影响到另一个独立对象。
-
String对象可以缓存hashcode。字符串的不可变性保证了hash码的唯一性,因此可以缓存String的hashCode,这样不用每次去重新计算哈希码。在进行字符串比较时,可以直接比较hashCode,提高了比较性能;
-
安全性。String被许多java类用来当作参数,如url地址,文件path路径,反射机制所需的String参数等,若String可变,将会引起各种安全隐患。