当前位置: 首页 > 后端技术 > Java

为什么String是不可变的

时间:2023-04-01 13:27:13 Java

介绍String是最常用的类之一,但是为什么要设计成不可变的呢。在面向对象的世界中,不变性意味着一旦一个对象完成了它的构造,它的实例就不能被改变。在java、C#等语言中,String是不可变的。不变性的好处是类加载。字符串用作类加载的参数。想象一下当String可变时会发生什么。它的值将被篡改,然后加载错误的类。不可变特性提供了加载确切类的安全性。比如我们要加载com.amberke.PasswordAuth来验证密码,但是它指向的值可能会变成com.hack.PasswordHacker。线程安全的不变性已经隐式的让String成为了线程安全的,在多线程中不需要额外的使用同步来实现线程安全。HashMapKey的理想类型,String,经常被用作HashMapKey的类型。因为它是不可变的,所以它的hashcode在创建的时候就已经存在了,不需要计算值。不可变堆空间可以节省大量的堆空间,因为如果你创建不同的具有相同值的String变量,它们将指向同一个字符串对象,即内存中实际上只有一份。