gpt4 book ai didi

java - 为什么每次我们使用 new 关键字创建字符串时 jvm 都会创建新的字符串对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:40 25 4
gpt4 key购买 nike

如果 jvm 创建了 string pool 用于内存优化,那么为什么每次我们使用 new 关键字创建字符串时它都会创建新对象,即使它存在于字符串池中吗?

最佳答案

... why does Java create new Object each time we create a string using the new keyword even though it exists in string pool?

因为您明确告诉它! new 运算符总是 创建一个新对象。 JLS 15.9.4说:

"The value of a class instance creation expression is a reference to the newly created object of the specified class. Every time the expression is evaluated, a fresh object is created."


郑重声明,调用 new String(String) 几乎总是错误的……但在晦涩难懂的情况下它可能会有用。可以想象,您可能想要一个 equals 返回 true== 返回 false 的字符串。调用 new String(String) 将为您提供。


对于旧版本的 Java,substringtrim 和其他可能的 String 方法会为您提供共享支持的字符串与原件一起存放。在某些情况下,这可能会导致内存泄漏。例如,调用 new String(str.trim()) 可以防止内存泄漏,但代价是创建修剪后的字符串的新副本。 String(String) 构造函数保证分配一个新的后备数组并为您提供一个新的 String 对象。

substringtrim 的这种行为在 Java 7 中发生了变化。

关于java - 为什么每次我们使用 new 关键字创建字符串时 jvm 都会创建新的字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com