关于String对象创建

0 java string

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

1)

String s = new String("abc");
s = s + "xyz";
Run Code Online (Sandbox Code Playgroud)

2)

String s = new String("abc");
String s1 = "xyz";
Run Code Online (Sandbox Code Playgroud)

Bog*_*dan 5

第一种情况:

String s = new String("abc");
s = s + "xyz";
Run Code Online (Sandbox Code Playgroud)

你有:

  • "abc"是一个字符串文字,并且是interned =>一个字符串实例
  • String s = new String("abc")创建另一个"abc"存储在heap =>另一个字符串实例中的字符串;
  • s = s + "xyz";你有"xyz"一个字符串文字,它是interned和堆上的另一个字符串是使用连接值构建的,"abcxy"这是另一个字符串.

总共创建了4个字符串,旧的值s被丢弃.你留在"abc""xyz"实习字符串和字符串"abcxyz"存储在s.

第二种情况:

String s = new String("abc");
String s1 = "xyz";
Run Code Online (Sandbox Code Playgroud)

你有:

  • "abc" 是一个字符串文字,并且是interned =>一个实例
  • String s = new String("abc")创建另一个"abc"存储在heap =>另一个实例中的字符串
  • String s1 = "xyz";你有"xyz"一个字符串文字,它被实习并s1指向它.

您总共创建了3个字符串.你仍然有两个实习弦"abc""xyz",另一个"abc"存放在堆和转交的s同时s1指向实习"xyz".

您可能还会看一下这些基本解释:SCJP提示行:字符串,字面意思