为什么String在Java中是不可变的是流行的面试问题之一。String
是任何编程语言中最常用的类之一。String
是Java中的不可变和final
。Java运行时环境维护一个String
池,使得String
成为一个特殊的类。
为什么String在Java中是不可变的?
下面来看一下String
不可变的一些好处,这将有助于理解为什么String
在Java中是不可变的。
-
因为String在Java中是不可变的。Java运行时环境可以节省大量的堆空间,因为不同的
String
变量可以引用池中的相同String
变量。如果String
不是不可变的,那么String缓冲池失去作用,因为任何变量已经改变了值,它也会反映在其他变量中。 -
如果String是可变的,那么它将对应用程序造成严重的安全威胁。例如,数据库用户名,密码作为
String
传递以获取数据库连接,并在套接字编程主机和端口详细信息中作为String
传递。由于String
是不可变的,因此无法更改其值,否则任何黑客都可能更改引用的值以导致应用程序中出现安全问题。 -
由于
String
是不可变的,因此对于多线程是安全的。可以跨不同的线程共享单个String
实例。这避免了使用同步来保证线程安全。字符串是隐式线程安全的。 -
字符串在java类加载器中使用,不可变性提供了安全性,类由
Classloader
加载。例如,假设尝试加载java.sql.Connection
类的实例,但引用的值更改为myhacked.Connection
类,可以对数据库执行不需要的操作。 -
由于
String
是不可变的,因此在创建时缓存它的哈希码,不需要再次计算。这使得它成为Map中键的一个很好的候选者,它的处理速度比其他HashMap
键对象快。这就是String是最广泛用作HashMap
键的原因。
以上是String
是不可变的一些原因,它显示了String
不变性的好处。它是Java String类的一个很棒的特性,使它变得特别。
原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/java/string-immutable-final-java.html