java - 字符串引用?

标签 java string

我们创建以下 String 对象?

String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";

上面的两个问题:

  1. system.out.println("valof str1 "+str1 ); -- 它将 str1 打印为 ABC 但是当我们比较if(str1==str2)时,它比较的是字符串对象的引用。如何 jvm 有区别吗?

  2. str1str2str3 有不同的引用,但 str3str4 有相同的引用所以 jvm 检查我们要用相等运算符(而不是 new)创建的字符串是否已经存在(如果它存在它不会创建新对象只是将相同的引用分配给新变量即 str4) 但它不会在新运算符的情况下进行此验证?

最佳答案

在 Java 中,字符串文字(纯 "ABC" 而不是 new String("ABC"))是interned。也就是说,JVM 中只存储了一个副本,并且始终是使用的那个副本。这就是为什么在使用 == 时它们比较相等。

以下比较也总是正确的:

str1.intern() == str2.intern()
str1.intern() == str3
str2.intern() == str3
str1.intern() == str4
str2.intern() == str4

关于java - 字符串引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377058/

相关文章:

java - 在 Paint(g) 中设置 JLabel 的文本 - 这是错误的吗?

java - 在没有收集的情况下在 Java 中迭代 Spark DataFrame

c 读取字符串输入错误

java - 如何让用户通过字符串输入选择特定项目?

ios - 无法将类型 '__NSCFConstantString' 的值转换为 'NSArray'

java - 创建使用网站图标的 Javadoc HTML 页面

java - 包含 View 对象标签的表

java - Apache POI 公式单元格复制非常慢

Python 连接字符串和函数

string - 根据一组文档的相似性对句子进行排名的最佳方法