关于String对象创建

时间:2015-03-01 16:13:33

标签: java string

我对字符串对象的创建感到有点困惑。有人能告诉我,在下面两种情况下会创建多少个String对象?

1)

String s = new String("abc");
s = s + "xyz";

2)

String s = new String("abc");
String s1 = "xyz";

2 个答案:

答案 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)你有两个。