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