Java 我们写东西时创建了多少个对象

Java 我们写东西时创建了多少个对象,java,string,jvm,Java,String,Jvm,我在某处读到JVM创建2个对象,第一个在池中,第二个在堆中 这是真的吗?如果是真的,那么为什么JVM在已经有一个对象的情况下创建了2个对象呢 是的,你是对的。它创建两个对象。一个在字符串常量池中,另一个在堆中指向字符串池的对象 如果考虑字符串STR =“hello”/string字符串,它只在字符串常量池中由JVM创建一个对象。 根据您的语法(stringstr=newstring(“xyz”)//stringobject),JVM创建2个对象。一个在字符串池中,另一个在堆中) 如需进一步参考,

我在某处读到JVM创建2个对象,第一个在池中,第二个在堆中


这是真的吗?如果是真的,那么为什么JVM在已经有一个对象的情况下创建了2个对象呢

是的,你是对的。它创建两个对象。一个在字符串常量池中,另一个在堆中指向字符串池的对象

  • 如果考虑字符串STR =“hello”/string字符串,它只在字符串常量池中由JVM创建一个对象。<李>
  • 根据您的语法(stringstr=newstring(“xyz”)//stringobject),JVM创建2个对象。一个在字符串池中,另一个在堆中) 如需进一步参考,请查看以下讨论:

    加载类后,“xyz”将在常量池中 当该行实际运行时,str被放在堆上


    您正在使用新关键字。。。。这将是堆。。。不是字符串pool这是真的,这是真的,因为你让它这么做。@LouisWasserman我的问题是JVM为什么要创建两个对象,因为JVM需要为
    “xyz”
    创建一个对象,然后你让它创建另一个对象,一个对象的副本。池与此无关。两个
    String
    实例都存储在堆中,原因很简单,因为在Java编程语言中,术语“heap”就是这样定义的,即所有Java对象的存储空间。字符串池仅包含对字符串实例的引用。但在幕后,至少有一个数组保存实际的字符数据,在Java中,数组也是对象。根据JRE版本的不同,甚至可能有两个数组,但在最近的JRE中,数组在两个字符串之间共享。
    String str=new String ("xyz");