我对字符串对象的创建感到有点困惑。有人能告诉我,在下面两种情况下会创建多少个String对象?
1)
String s = new String("abc");
s = s + "xyz";
2)
String s = new String("abc");
String s1 = "xyz";
答案 0 :(得分:5)
第一种情况:
String s = new String("abc");
s = s + "xyz";
你有:
"abc"
是字符串文字,interned =>一个字符串实例String s = new String("abc")
创建另一个存储在heap =>中的字符串"abc"
另一个字符串实例; s = s + "xyz";
中,您有"xyz"
作为一个字符串文字,这是一个字符串文字,并且堆上的另一个字符串是使用连接值"abcxy"
构建的,这是另一个字符串。总共创建了4个字符串,旧值s
被丢弃。您仍然使用存储在"abc"
中的"xyz"
和"abcxyz"
实习字符串以及字符串s
。
第二种情况:
String s = new String("abc");
String s1 = "xyz";
你有:
"abc"
是一个字符串文字,并且是interned =>一个实例String s = new String("abc")
创建另一个存储在heap =>中的字符串"abc"
另一个例子String s1 = "xyz";
您将"xyz"
作为一个字符串文字,并且s1
指向它。您总共创建了3个字符串。您保留两个实习字符串"abc"
和"xyz"
,另一个"abc"
存储在堆中并由s
引用,而s1
指向实习"xyz"
}。
您可能还会看一下这些基本解释:The SCJP Tip Line: Strings, Literally
答案 1 :(得分:0)
执行1)后你有一个String对象,2)你有两个。