考虑以下代码:
String first = "abc";
String second = new String("abc");
Run Code Online (Sandbox Code Playgroud)
使用new关键字时,Java会abc String再次创建吗?这会存储在常规堆还是String池中?多少人String在将s结尾String池?
我已经阅读了关于如何检查字符串是否在Java中实现的答案,但我不理解以下结果:
String x = args[0]; // args[0] = "abc";
String a = "a";
String y = a + "bc";
System.out.println(y.intern() == y); // true
Run Code Online (Sandbox Code Playgroud)
但是如果我声明一个字符串文字:
String x = "abc";
String a = "a";
String y = a + "bc";
System.out.println(y.intern() == y); // false
Run Code Online (Sandbox Code Playgroud)
此外,没有任何字符串文字,args[0]似乎直接实习:
// String x = "abc";
String y = args[0];
System.out.println(y.intern() == y); // true (???)
// false if the first line is uncommented
Run Code Online (Sandbox Code Playgroud)
为什么y.intern() == y更改取决于是否x是文字,即使是在使用命令行参数时的示例?
我知道 …