我试图理解等式(==)equals()方法,但无法推断出这种行为。 有人可以使用以下println语句解释此行为。
String a="Hai";
String b="Hai";
int c=5, d=5;
System.out.println("Check1 : " + (c==d)); //prints "Check1 : true"
System.out.println("Check2 : " + a==b); //prints false. It didn't print the string "Check2 : "
System.out.println("Check3 : " +a.equals(b)); //prints "Check3 : true"
System.out.println(" c==d : " + c==d); //compile time error - incomparable types: java.lang.String and int
非常感谢。
答案 0 :(得分:6)
这是因为操作的顺序,在这一部分:
" c==d : " + c == d
没有括号,因此编译器会:
(" c==d : " + c) == d
您收到错误,因为未定义string == int
。对于另一个例子,它的想法是一样的:
"Check2 : " + a == b → ("Check2 : " + a) == b → "Check2 : Hai" == "Hai" → false
答案 1 :(得分:1)
您需要在执行整数运算之前添加括号
这样做:
System.out.println(" c==d : " + (c==d));
答案 2 :(得分:0)
我会尝试逐一解释。
System.out.println("Check1 : " + (c==d));
这将打印true
,因为它是int
比较,c
和d
都具有相同的值。
System.out.println("Check2 : " + a==b);
正在打印false
,因为连接字符串Check2 :
+ a
不等于字符串b
。如果您将a==b
更改为(a==b)
,那么它将开始打印true
,因为a
和b
都指向字符串池中的相同引用。
System.out.println("Check3 : " + a.equals(b));
这将打印true
,因为字符串a
的内容等于字符串b
的内容。
System.out.println(" c==d : " + c==d);
这将抛出一个错误,因为它将被解析为与c==d
连接的字符串int c
转换为字符串(因为重载)等于int d
并且您知道我们可以&# 39; t将String与Integer进行比较,因此会产生错误。