为什么字符串在 Java 中不可变?

为什么字符串在Java中是不可变的,是受欢迎的面试问题之一。字符串是任何编程语言中最常用的类之一。我们知道字符串在Java中是不可变的,也是最终的。

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

why string is immutable in Java, why string is immutable and final in java Let's look at some of the benefits of String immutability, that will help in understanding why String is immutable in Java.

  1. 联合国 [string pool] (/community/touris/what-is-java-string-pool) 之所以可能,只是因为String在爪哇语中是不可改变的. 这样 Java runtime 就可以保存出许多 [重空 (/community/tutoris/java-heap-space-vs-stack-memory),因为不同的字符串变量可以指池中相同的字符串变量. 如果字符串不会是不可改变的,那么字符串中断是不可能的,因为如果有任何变量会改变值,它也会被其他变量所反映.
  2. 如果字符串不是不可改变的,则会对应用程序造成严重的安全威胁. 例如,数据库用户名,密码作为字符串传递,以获得数据库连接,并在socket 编程主机和端口细节中作为字符串传递. 由于字符串是不可改变的,因此其值不能被更改,否则任何黑客都可以改变引用的值来引起应用程序中的安全问题.
  3. 由于String是不可改变的,因此对于多读是安全的. 单个字符串实例可以跨越不同的线程共享. 这避免了使用同步实现线程安全. 字符串默认为线性安全
  4. 字符串用于java Classloader,而无常提供的安全性,即正确分类被Classloader所装载. 例如,如果您试图装入 java. sql. Connection 类,则引用的值改为 密克勒斯 。 连接 可以做您数据库中不想要的东西 。 5 。 由于字符串是不可改变的,因此其hashcode在创建时被缓存,不需要再计算. 这使得它成为了地图中密钥的绝佳候选,其处理速度也快于其他HashMap密钥对象. 这就是为什么字符串作为HashMap密钥被最广泛使用的原因. (_) (英语)

上面是我可以想到的一些原因,它显示了 String 不可变性的好处。 它是 [Java String 类]( / 社区 / 教程 / java 字符串)的一个很棒的功能,使其特别。

您可以从我们的 GitHub 存储库中查阅更多 Java String 示例。

Published At
Categories with 技术
Tagged with
comments powered by Disqus