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

r6hnlfcb  于 2022-09-17  发布在  Java
关注(0)|答案(4)|浏览(160)

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

9q78igpj

9q78igpj1#

相关的https://bytes.com/topic/java/answers...ng#post3826024
考虑两个具有相同内容的字符串对象,JVM将为池中的em分配相同的内存空间,并启用所谓的“对象共享”。如果您想看到在幕后发生的证据,请验证两个对象的哈希代码。现在尝试更改其中一个对象的内容并打印哈希代码。那就不一样了。为什么它是不变的?因为它们都使用相同的存储区域;想象一个对象操纵内容。这些变化也会反映在另一个变化中,这是您不希望看到的。由于同样的原因,该区域通常不允许使用垃圾收集器。当一个对象使用它时,它不想释放内存空间。

zdwk9cvp

zdwk9cvp2#

字符串在Java中是不可变的,因为字符串对象缓存在字符串池中。。。字符串类不可变的另一个原因可能会由于HashMap而死亡。由于字符串作为HashMap键非常流行,因此它们必须是不可变的,以便它们可以检索存储在HashMap中的值对象。

cgyqldqp

cgyqldqp3#

在Java中,字符串是不可变的,因为字符串对象缓存在字符串池中。

sycxhyv7

sycxhyv74#

当多个客户共享字符串文字时,字符串是不可变的;存在一种风险,即一个客户的行为会影响所有其他客户。字符串被广泛用作各种java类的参数。若字符串不是不可变的,那个么文件将被更改并导致严重的安全威胁。

相关问题