为什么在Java中String是不可变的?
为什么String在Java中是不可变的,这是受欢迎的面试问题之一。
字符串是任何编程语言中最常用的类之一。
我们知道String在Java中是不变的且是最终的。
Java运行时维护一个使它成为特殊类的String池。
为什么在Java中String是不可变的?
让我们看一下String不变性的一些好处,这将有助于理解为什么String在Java中是不变的。
仅因为Java中的String是不可变的,才可能使用String pool。
这样,Java运行时可以节省大量堆空间,因为不同的String变量可以引用池中的同一String变量。
如果String不会是不可变的,那么String实习将是不可能的,因为如果有任何变量更改了值,那么它也将反映在其他变量中。如果String不可更改,那么它将对应用程序造成严重的安全威胁。
例如,数据库用户名,密码作为String传递以获取数据库连接,并在套接字编程中以String形式传递主机和端口详细信息。
由于String是不可变的,因此其值无法更改,否则任何黑客都可以更改引用的值,从而在应用程序中引起安全问题。由于String是不可变的,因此对于多线程而言是安全的。
单个String实例可以在不同线程之间共享。
这避免了为了线程安全而使用同步。
字符串是隐式线程安全的。字符串用于java类加载器中,不变性提供了确保类加载器加载正确类的安全性。
例如,考虑一个实例,您尝试加载java.sql.Connection类,但将引用的值更改为myhacked.Connection类,这可能会对数据库造成不良影响。由于String是不可变的,因此其哈希码会在创建时进行缓存,因此无需再次计算。
这使其成为Map中密钥的理想候选者,并且其处理比其他HashMap密钥对象更快。
这就是为什么String最广泛用作HashMap键的原因。
以上是我想到的一些原因,这些原因表明了字符串不可变的好处。
它是Java String类的一个强大功能,并且使其与众不同。