0

我试图理解相等 (==) 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

非常感谢。

4

3 回答 3

6

这是因为操作的顺序,在这部分:

" c==d : " + c == d  

没有括号,所以编译器会:

(" c==d : " + c) == d  

你得到一个错误,因为string == int没有定义。另一个例子的想法是一样的:

"Check2 : " + a == b → ("Check2 : " + a) == b → "Check2 : Hai" == "Hai" → false
于 2016-03-09T07:32:34.410 回答
1

您需要在进行整数运算之前添加括号

这样做:

System.out.println(" c==d : " + (c==d));
于 2016-03-09T07:39:03.193 回答
0

我将尝试一一解释。

System.out.println("Check1 : " + (c==d));

这将打印true,因为它是int比较并且两者都c具有d相同的值。

System.out.println("Check2 : " + a==b);

它正在打印false,因为连接的 String Check2 : +a不等于 String b。如果更改a==b(a==b)then 它将开始打印true两者ab指向字符串池中的相同引用。

System.out.println("Check3 : " + a.equals(b));

这将打印出来true,因为 Stringa的内容等于String 的内容b

System.out.println(" c==d : " + c==d);   

这将引发错误,因为它将被解析为 Stringc==d连接并int c转换为 String(因为过载)等于,int d并且您知道我们无法将 String 与 Integer 进行比较,因此这将引发错误。

于 2016-03-09T07:38:42.060 回答