为什么字符串在Java中是不可变的?
9q78igpj1#
相关的https://bytes.com/topic/java/answers...ng#post3826024考虑两个具有相同内容的字符串对象,JVM将为池中的em分配相同的内存空间,并启用所谓的“对象共享”。如果您想看到在幕后发生的证据,请验证两个对象的哈希代码。现在尝试更改其中一个对象的内容并打印哈希代码。那就不一样了。为什么它是不变的?因为它们都使用相同的存储区域;想象一个对象操纵内容。这些变化也会反映在另一个变化中,这是您不希望看到的。由于同样的原因,该区域通常不允许使用垃圾收集器。当一个对象使用它时,它不想释放内存空间。
zdwk9cvp2#
字符串在Java中是不可变的,因为字符串对象缓存在字符串池中。。。字符串类不可变的另一个原因可能会由于HashMap而死亡。由于字符串作为HashMap键非常流行,因此它们必须是不可变的,以便它们可以检索存储在HashMap中的值对象。
cgyqldqp3#
在Java中,字符串是不可变的,因为字符串对象缓存在字符串池中。
sycxhyv74#
当多个客户共享字符串文字时,字符串是不可变的;存在一种风险,即一个客户的行为会影响所有其他客户。字符串被广泛用作各种java类的参数。若字符串不是不可变的,那个么文件将被更改并导致严重的安全威胁。
4条答案
按热度按时间9q78igpj1#
相关的https://bytes.com/topic/java/answers...ng#post3826024
考虑两个具有相同内容的字符串对象,JVM将为池中的em分配相同的内存空间,并启用所谓的“对象共享”。如果您想看到在幕后发生的证据,请验证两个对象的哈希代码。现在尝试更改其中一个对象的内容并打印哈希代码。那就不一样了。为什么它是不变的?因为它们都使用相同的存储区域;想象一个对象操纵内容。这些变化也会反映在另一个变化中,这是您不希望看到的。由于同样的原因,该区域通常不允许使用垃圾收集器。当一个对象使用它时,它不想释放内存空间。
zdwk9cvp2#
字符串在Java中是不可变的,因为字符串对象缓存在字符串池中。。。字符串类不可变的另一个原因可能会由于HashMap而死亡。由于字符串作为HashMap键非常流行,因此它们必须是不可变的,以便它们可以检索存储在HashMap中的值对象。
cgyqldqp3#
在Java中,字符串是不可变的,因为字符串对象缓存在字符串池中。
sycxhyv74#
当多个客户共享字符串文字时,字符串是不可变的;存在一种风险,即一个客户的行为会影响所有其他客户。字符串被广泛用作各种java类的参数。若字符串不是不可变的,那个么文件将被更改并导致严重的安全威胁。