为什么字符串在Java中是不可变的,是受欢迎的面试问题之一。字符串是任何编程语言中最常用的类之一。我们知道字符串在Java中是不可变的,也是最终的。
为什么在 Java 中 String 是不可变的?
Let's look at some of the benefits of String immutability, that will help in understanding why String is immutable in Java.
- 联合国 [string pool] (/community/touris/what-is-java-string-pool) 之所以可能,只是因为String在爪哇语中是不可改变的. 这样 Java runtime 就可以保存出许多 [重空 (/community/tutoris/java-heap-space-vs-stack-memory),因为不同的字符串变量可以指池中相同的字符串变量. 如果字符串不会是不可改变的,那么字符串中断是不可能的,因为如果有任何变量会改变值,它也会被其他变量所反映.
- 如果字符串不是不可改变的,则会对应用程序造成严重的安全威胁. 例如,数据库用户名,密码作为字符串传递,以获得数据库连接,并在socket 编程主机和端口细节中作为字符串传递. 由于字符串是不可改变的,因此其值不能被更改,否则任何黑客都可以改变引用的值来引起应用程序中的安全问题.
- 由于String是不可改变的,因此对于多读是安全的. 单个字符串实例可以跨越不同的线程共享. 这避免了使用同步实现线程安全. 字符串默认为线性安全
- 字符串用于java Classloader,而无常提供的安全性,即正确分类被Classloader所装载. 例如,如果您试图装入
java. sql. Connection
类,则引用的值改为密克勒斯
。 连接类
可以做您数据库中不想要的东西 。 5 。 由于字符串是不可改变的,因此其hashcode在创建时被缓存,不需要再计算. 这使得它成为了地图中密钥的绝佳候选,其处理速度也快于其他HashMap密钥对象. 这就是为什么字符串作为HashMap密钥被最广泛使用的原因. (_) (英语)
上面是我可以想到的一些原因,它显示了 String 不可变性的好处。 它是 [Java String 类]( / 社区 / 教程 / java 字符串)的一个很棒的功能,使其特别。
您可以从我们的 GitHub 存储库中查阅更多 Java String 示例。