当我们使用new运算符创建一个字符串时,我们将字符串放在构造函数内的双引号中。 例如
String s=new String("literal");
JVM是否为“literal”创建了一个新的字符串对象并将其传递给构造函数?即,创建了两个对象,其中一个是垃圾回收。或者,只创建一个由s引用的对象。
由于以下声明,问题突然出现: Jvm为程序中的“每个双引号”值创建对象。
答案 0 :(得分:0)
JVM是否为" literal"创建了一个新的字符串对象。并将其传递给构造函数?
基本上是的,尽管编译器和类加载器确实是负责任的。
,即创建了两个对象,其中一个是垃圾回收。
是的,虽然我确定你的意思是“收藏”'而不是收集'。
或者,只创建一个由s引用的对象。
没有
Jvm为"每个双引号创建对象"程序中的值。
如上所述,这是不正确的。你在哪里看过的?有需要考虑的汇集。字符串文字和对象之间没有1:1的关系。
答案 1 :(得分:-1)
在这里找到了一个很好的解释:Link
String str = new String("Cat");
在上面的语句中,将创建1或2个字符串。
如果有的话 已经是池中的字符串文字“Cat”,那么只有一个字符串“str” 将在池中创建。
如果没有字符串文字“Cat” 池,然后它将首先在池中创建,然后在池中 堆空间,因此将创建总共2个字符串对象。