class StringTest1
{
public static final void main(String... a)
{
String str1="JAVA";
String str2="WORLD";
String str3=str1+str2;
}
}
在此过程中将创建多少个对象?我想会创建3个对象。
class StringTest2
{
public static final void main(String... a)
{
String strTest="JAVA"+"WORLD";
}
}
在这个过程中会创建多少个对象?有多少对象是可访问的?有人告诉我"JAVA"+"WORLD“是一个表达式,它不会存储在字符串池中。
发布于 2013-07-01 02:10:51
在第一种情况下,将创建三个对象,并且所有这些对象都是可访问的,因为您拥有对它们的活动引用。
在第二种情况下,如果您正在执行如下操作
String str1="JAVA";
String str2="WORLD";
String strTest="JAVA"+"WORLD";
然后,将创建三个对象。在这里,当你创建strTest时,"JAVA“将在字符串对象池中,所以它不会为此分配内存,而是直接从池中引用。对于"WORLD“也是如此。然后将在这两个对象的基础上创建一个新对象,并将其分配给strTest。这里的可访问对象将是3。
但是如果你正在做像这样的事情
String strTest="JAVA"+"WORLD";
这里只有一个你可以访问的对象,那就是"JAVAWORLD“。池中有对"JAVA“和"WORLD”的引用,但您无法直接访问它们。正如@Vivin Paliath提到的,"JAVA“和"WORLD”将被实例化以形成一个新的对象"JAVAWORLD“。因此,只创建了两个对象。
有关字符串对象池see here的详细信息,请参阅
希望这能有所帮助。
https://stackoverflow.com/questions/17393271
复制相似问题