为什么 Java 字符串是不可变的(字符串是不可变类型吗)

这些是在 Java 中使 String 不可变的更多原因。这些是:

  • 如果 String 在 Java 中不是不可变的,则无法使用 String 池。JRE 节省了大量的堆空间。同一个字符串变量可以被池中的多个字符串变量引用。如果 String 不是不可变的,则 String interning 也是不可能的。
  • 如果我们不使 String 不可变,它将对应用程序构成严重的安全威胁。例如,数据库用户名、密码作为字符串传递以接收数据库连接。套接字编程主机和端口描述也作为字符串传递。String 是不可变的,所以它的值不能改变。如果字符串不是不可变的,任何黑客都可以通过更改引用值在应用程序中引起安全问题。
  • String 由于其不可变性,因此对于多线程是安全的。不同的线程可以访问单个“字符串实例”。它消除了线程安全的同步,因为我们隐式地使字符串线程安全。
  • 不变性提供了通过 Classloader 加载正确类的安全性。例如,假设我们有一个实例,我们尝试加载 java.sql.Connection 类,但对 myhacked.Connection 类的引用值的更改对我们的数据库造成了不必要的影响。
为什么 Java 字符串是不可变的(字符串是不可变类型吗)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注