java - new String() 和普通 String 是如何创建的? java中的字符串类(混淆)

标签 java string

<分区>

我正在阅读有关 String in java 的内容,并试图理解它。

起初,String s1="11"和 String s2=new String ("11") 的工作方式(创建)很简单,我也理解了 intern 方法。
但是我遇到了这个例子( friend 给的),让我对一切都感到困惑。

我需要帮助才能理解这一点。

String s1 = new String(new String("2")+new String("2"));
s1.intern();
String s2="22";
System.out.print(s1==s2);  //=>true as output.
String s3 =new String (new String("2")+new String("2"));
s3.intern();
String s4="22";
System.out.print(s3==s4);  //=>false as output.

这段代码的答案是对还是错。

S1 和 s2 的部分很好,根据我的理解是正确的,但第二部分我不明白。

希望有人能逐行破解代码,帮助我理解。

最佳答案

s1.intern();s1 添加到字符串池中,因此字符串 "22" 现在位于字符串池中字符串。因此,当您编写 s2 = "22" 时,"22" 与 s1 相同,因此 s1 == s2

s3.intern() 不会将 s3 添加到字符串池中,因为字符串 "22" 已经存在。

s3.intern() 确实返回相同的 "22",即 s1 但未使用。因此 s3 不等于 s4

关于java - new String() 和普通 String 是如何创建的? java中的字符串类(混淆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42883581/

相关文章:

python - 将字符串列表 [ '3' , '1' , '2' ] 转换为排序整数列表 [1, 2, 3]

java - 无法跳过某项 Activity

java - 将简单的 html 渲染到 Canvas 上

java - 如何将依赖样式名称与 CssResource 混淆一起使用?

string - 如何在没有库函数的情况下将字符串解析为整数?

javascript - 如何在javascript中将整数数组转换为十六进制字符串,反之亦然

java - 正则表达式提取特定字符串

java - 编译从哪里开始?文件顶部? (或)来自包含 main 的类? (或)公开课?

c++ - C str 表示 - const char* 与 const unsigned char*

c# - String.Concat(Object) 而不是 String.Concat(String) 的用途