我们在新String(“literal”)中放置的字符串文字会发生什么;

时间:2017-11-19 07:01:34

标签: java

当我们使用new运算符创建一个字符串时,我们将字符串放在构造函数内的双引号中。 例如

String s=new String("literal");

JVM是否为“literal”创建了一个新的字符串对象并将其传递给构造函数?即,创建了两个对象,其中一个是垃圾回收。或者,只创建一个由s引用的对象。

由于以下声明,问题突然出现: Jvm为程序中的“每个双引号”值创建对象。

2 个答案:

答案 0 :(得分:0)

  

JVM是否为" literal"创建了一个新的字符串对象。并将其传递给构造函数?

基本上是的,尽管编译器和类加载器确实是负责任的。

  

,即创建了两个对象,其中一个是垃圾回收。

是的,虽然我确定你的意思是“收藏”'而不是收集'。

  

或者,只创建一个由s引用的对象。

没有

  

Jvm为"每个双引号创建对象"程序中的值。

如上所述,这是不正确的。你在哪里看过的?有需要考虑的汇集。字符串文字和对象之间没有1:1的关系。

答案 1 :(得分:-1)

在这里找到了一个很好的解释:Link

String str = new String("Cat");
  

在上面的语句中,将创建1或2个字符串。

     

如果有的话   已经是池中的字符串文字“Cat”,那么只有一个字符串“str”   将在池中创建。

     

如果没有字符串文字“Cat”   池,然后它将首先在池中创建,然后在池中   堆空间,因此将创建总共2个字符串对象。