Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式证明字符串s=新字符串(“abc”)添加了文字字符串;abc";到字符串池_Java_String - Fatal编程技术网

Java 如何以编程方式证明字符串s=新字符串(“abc”)添加了文字字符串;abc";到字符串池

Java 如何以编程方式证明字符串s=新字符串(“abc”)添加了文字字符串;abc";到字符串池,java,string,Java,String,我在某处被问到这个问题:在 String s=new String("abc"); 如何以编程方式证明字符串文字“abc”将添加到字符串池中 PS:我知道JLS说-所有字符串文本(括在“”之间的字符串)都添加到字符串池中 此外,我还查看了生成的字节码,但在字节码中,我只能看到类常量池而不是字符串常量池。您可以使用 s != s.intern() 这将产生true 解释:假设调用s.intern()之前,“abc”不在字符串池中。然后s.intern() 例如,这将打印false: Stri

我在某处被问到这个问题:在

String s=new String("abc");
如何以编程方式证明字符串文字“abc”将添加到字符串池中

PS:我知道JLS说-所有字符串文本(括在“”之间的字符串)都添加到字符串池中

此外,我还查看了生成的字节码,但在字节码中,我只能看到类常量池而不是字符串常量池。

您可以使用

s != s.intern()
这将产生
true

解释:假设调用
s.intern()
之前,“abc”不在字符串池中。然后
s.intern()


例如,这将打印
false

String s2 = "x".concat("yz"); // "xyz" is not in the string pool, since it's calculated using a method
System.out.println(s2 != s2.intern());

由于双方不相等,
“abc”
在调用
intern()
之前就在字符串池中,这证明了这一说法。()



注意:如果您使用
string s=“abc”直接指定字符串文字,则这不起作用。但是,在这种情况下,您仍然可以使用
新字符串创建新字符串
,并使用新字符串。

您在这里说什么<代码>System.out.println(“abc”==新字符串(“abc”)
显示,即使字符串在字符串池中,引用也不相同。@ElliottFrisch-
s1.value==s2.value:true
//这证明了s1和s2的内部字符数组是相同的。您所能证明的是,如果您尝试插入文本字符串,您将获得相同的值。。。有时候。您可以尝试1000次而不证明任何内容,因为第1001次尝试可能会失败。@HotLicks-s1.value和s2.value的标识哈希代码是相同的,因此,它们在内部使用相同的“abc”。所谓“编程证明”,您的意思是“演示”?对于
String s=new String(“abc”)
s==s.intern()
返回false。还有,'charc={'p','q','r'};`<代码>字符串s=新字符串(c)。现在,如果执行
s==s.intern()
,则会得到
false
<在调用intern之前,code>pqr
不在字符串池中。@TheLostMind:你想用第一句话告诉我什么???我的回答中已经有了一个等价的陈述(仅用
!=
代替
=
true
而不是
false
)。“现在如果你做了
s==s.intern()
,你会得到
false
”这句话是完全错误的(至少上次我用Java8试过了)。