简介
String 是最罕用的类之一,可为什么它要设计成不可变的呢。在面向对象的世界里,不可变指的是是指一旦一个对象实现它的结构过程,这个实例就无奈被扭转了。
在 java 和 C# 等语言中,String 是不可变的
不可变的益处
类加载
String 被用作类加载的参数,试想一下当 String 为可变的话会产生什么,它的值会被篡改,继而就会加载谬误的类。不可变的个性提供了平安去加载精确的类。例如,咱们想要去加载 com.amberke.PasswordAuth 来校验明码,然而它所指向的值可能被改成了 com.hack.PasswordHacker。
线程平安
不可变曾经隐式地使 String 变得线程平安了,没必要额定地在多线程中应用 synchronization 去实现线程平安。
HashMap Key 的现实类型
String 经常用作 HashMap Key 的类型,正因为它是不可变的,它的 hashcode 创立的时候就曾经有了,不须要再去计算值了。
堆空间
不可变能够节俭掉许多堆的空间占用,因为如果创立了值一样的不同的 String 变量,它们会指向同一个字符串对象,也就是在内存中其实只有一份存在。