我们创建以下 String 对象?
String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
上面的两个问题:
system.out.println("valof str1 "+str1 );
-- 它将str1
打印为 ABC 但是当我们比较if(str1==str2)
时,它比较的是字符串对象的引用。如何 jvm 有区别吗?str1
与str2
和str3
有不同的引用,但str3
和str4
有相同的引用所以 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/