当我们使用new运算符创建字符串时,我们将字符串放在构造函数内的双引号中。例如:
String s=new String("literal");
JVM会为“文字”创建一个新的字符串对象并将其传递给构造函数吗?也就是说,创建了两个对象,其中一个是垃圾回收的。或者,只创建一个由s引用的对象。
问题弹出是因为以下语句: Jvm为程序中的“每个双引号”值创建对象。
发布于 2017-11-19 09:16:08
会为“文字”创建一个新的字符串对象并将其传递给构造函数吗?
本质上是这样的,尽管真正负责的是编译器和类加载器。
是由两个对象创建的,其中一个是垃圾回收的。
是的,虽然我相信你指的是“可收藏的”而不是“收藏的”。
或,则只创建一个由% s引用的对象。
不是的。
Jvm为程序中的“每个双引号”值创建对象。
如上所述,这是不正确的。你在哪里读到的?有需要考虑的池化。字符串和对象之间没有1::1的关系。
发布于 2017-11-19 09:25:10
在这里找到了一个很好的解释:Link
String str = new String("Cat");
在上述语句中,将创建1或2个字符串。
如果池中已有字符串文字“Cat”,则只会在池中创建一个字符串“str”。
如果池中没有字符串文字“Cat”,那么它将首先在池中创建,然后在堆空间中创建,因此总共将创建2个字符串对象。
https://stackoverflow.com/questions/47374472
复制相似问题