Java中字符串相等的println()方法。。。它到底是如何工作的?
我试图了解系统的工作原理。出来Java中的println()。。。在下面的2个代码段中,为什么答案不同,为什么不在println()方法中打印“Hello:”字符串
public static void main(String[] args) {
String x = "abc";
String y = "abc";
System.out.println("Hello:" + x == y);
System.out.println("x.equals(y): " + x.equals(y));
if(x == y){
System.out.println("Hello:" + x==y);
}
}
答案是:
false
x.equals(y): true
false
对于第二个代码段:
public static void main(String[] args) {
String x = "abc";
String y = "abc";
System.out.println( x == y);
System.out.println("x.equals(y): " + x.equals(y));
if(x == y){
System.out.println(x==y);
}
}
答案是:
true
x.equals(y): true
true
# 1 楼答案
这是因为operator precedence:
"Hello:" + x == y
相当于("Hello:" + x) == y
因为
+
的优先级高于==
# 2 楼答案
第一个返回false,因为+运算符比==运算符具有更高的先例性。如果替换代码,它也将返回true
System.out.println("Hello:" + (x == y));
您也可以在这里查看==和equals方法的差异
What is the difference between == vs equals() in Java?
因为我也会这么说
有关运算符优先级,请参见此
http://introcs.cs.princeton.edu/java/11precedence/