2024-03-14  阅读(58)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1034491386

回答

作为 Java 中使用最为广泛的 String ,它被设计为不可变,这就说明一旦一个 String 对象被创建,那么它就不能被更改了。这样的好处有如下几个:

  • 安全

String 经常被用于存储敏感信息,如网络连接的 URL、用户名和密码,如果 String 设计为可变的,那么这些敏感信息就可能会被恶意篡改,增加安全风险。

  • 多线程安全

String 不可变,天然线程安全,因为具备不变性的对象一定是线程安全的。所以在多线程条件下,我们不需要采取任何额外的保护机制。

  • 更高的效率和性能

String 不可变使得实现字符串常量池成为可能。字符串常量池是 JVM 中一个特殊的存储区域,用于存储所有的字符串字面量和字符串常量表达式。这意味着每个唯一的字符串字面量在JVM中只有一个副本,当我们请求创建相同的 String 对象时就不用每次都创建一个新对象,减少了内存的消耗。如果 String 是可变的,字符串常量池的这种优化就无法实现了,因为字符串内容的改变会影响到其他引用相同字符串的变量。

由于 String 不可变,使得它的哈希值是可以被缓存。这就意味着我们不必每次都需要调用hashCode() 来计算一个 String 对象的哈希值,这对使用 String 对象作为 HashMap或HashSet中的 key 是非常有用的,它提高了哈希表的操作效率。

  • 点赞