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