【发布时间】:2017-11-20 19:18:52
【问题描述】:
String str=new String ("xyz");
我在某处读到 JVM 在池中创建了 2 个对象,第一个在堆中创建了第二个对象。
这是真的吗?如果为真,那么为什么 JVM 在已经存在一个对象时会创建 2 个对象,谁能解释一下?
【问题讨论】:
-
您正在使用 new 关键字.... 将进入堆...而不是字符串池
-
这是真的,这是真的,因为你告诉它这样做。
-
@LouisWasserman 我的问题是为什么 JVM 创建了 2 个对象
-
因为 JVM 需要有一个
"xyz"的对象,然后你告诉它创建另一个对象,一个副本。 -
池无关。两个
String实例都存储在堆中,因为这就是Java 编程语言中“堆”一词的定义方式,即所有Java 对象的存储空间。字符串池仅包含对字符串实例的references。但在幕后,至少有一个数组保存实际的字符数据,而在 Java 中,数组也是对象。根据 JRE 版本,甚至可能有两个数组,但在最近的 JRE 中,数组在两个字符串之间共享。