如前所述,==运算符比较对象引用以检查它们是否引用堆上的同一对象。如果是这样,为什么我得到这段代码的“等于”?
public class Salmon {
public static void main(String[] args) {
String str1 = "Str1";
String str2 = "Str1";
if (str1 == str2) {
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
}
}
程序将打印Equal
。(至少使用Sun Hotspot和suns Javac。)此处在http://ideone.com/8UrRrk上进行了演示。
这是因为该字符串字面常量存储在一个事实串池和字符串的引用可以被重复使用。
进一步阅读:
但是:
public class Salmon {
public static void main(String[] args) {
String str1 = "Str1";
String str2 = new String("Str1");
if (str1 == str2) {
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
}
}
Not equal
由于new
可以保证引入新的参考文献,因此将进行打印。
因此,经验法则:始终使用该equals
方法比较字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句