java - 为什么 String.intern() 方法会返回两个不同的结果?

标签 java string stringbuilder string-interning

<分区>

我有这样的代码:

String str1 = new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern() == str1); //true

String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern() == str2); //false

String str3 = new StringBuilder("Str").append("ing").toString();
System.out.println(str3.intern() == str3); //true

我能理解为什么 str1.intern() == str1str3.intern() == str3 是真的,但我不明白 str2.intern() == str2。 为什么这是错误的?

我的java版本是:1.8.0_73

最佳答案

String.intern() 返回字符串文字池中的一个字符串。但是,如果字符串已存在于池中,它将返回现有的字符串。

如果您选择一个新字符串,它应该返回您创建的字符串,但如果您使用恰好已经存在于池中的字符串,您将获得现有字符串。

假设在这种情况下 "java" 已经存在于池中是合理的,所以当您调用 intern() 时它返回一个不同的对象所以 == 是错误。

注意:string.intern().equals(string) 应始终为真。

关于java - 为什么 String.intern() 方法会返回两个不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063388/

相关文章:

Java 图形字体 - 如何确保字符位于特定区域?

java - 有没有条件jackson json策略?

java: ActionListener 变量包含修改自身的操作 - 'Variable might not have been initialized'

c# - 不能加倍。解析字符串

string - 遍历字符串中的行,包括换行符

java - 为什么\n 和 (String)System.getProperty ("line.separator");采取不同的行动?

java - 无法将我的 DefaultListModel 分配给 Java NetBeans 中的 JList

JavaScript 字符串操作

java - 在 Java 中迭代 StringBuilder 的标准方法?

java - StringBuilder 和 ResultSet 性能问题的可能原因是什么