我对字符串对象的创建感到有点困惑.有人能告诉我,在下面两种情况下会创建多少个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)
第一种情况:
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提示行:字符串,字面意思