为什么String在Java中是不可变的?

为什么String在Java中是不可变的是流行的面试问题之一。String是任何编程语言中最常用的类之一。String是Java中的不可变和final。 Java运行时环境维护一个String池,使得String成为一个特殊的类。

为什么String在Java中是不可变的?

下面来看一下String不可变的一些好处,这将有助于理解为什么String在Java中是不可变的。

  1. 因为String在Java中是不可变的。Java运行时环境可以节省大量的堆空间,因为不同的String变量可以引用池中的相同String变量。 如果String不是不可变的,那么String缓冲池失去作用,因为任何变量已经改变了值,它也会反映在其他变量中。

  2. 如果String是可变的,那么它将对应用程序造成严重的安全威胁。 例如,数据库用户名,密码作为String传递以获取数据库连接,并在套接字编程主机和端口详细信息中作为String传递。 由于String是不可变的,因此无法更改其值,否则任何黑客都可能更改引用的值以导致应用程序中出现安全问题。

  3. 由于String是不可变的,因此对于多线程是安全的。 可以跨不同的线程共享单个String实例。 这避免了使用同步来保证线程安全。 字符串是隐式线程安全的。

  4. 字符串在java类加载器中使用,不可变性提供了安全性,类由Classloader加载。 例如,假设尝试加载java.sql.Connection类的实例,但引用的值更改为myhacked.Connection类,可以对数据库执行不需要的操作。

  5. 由于String是不可变的,因此在创建时缓存它的哈希码,不需要再次计算。 这使得它成为Map中键的一个很好的候选者,它的处理速度比其他HashMap键对象快。 这就是String是最广泛用作HashMap键的原因。

以上是String是不可变的一些原因,它显示了String不变性的好处。 它是Java String类的一个很棒的特性,使它变得特别。

你可能感兴趣的:(为什么String在Java中是不可变的?)