Java:在String和int变量上使用equals()和===

时间:2016-03-09 07:29:34

标签: java equals equality-operator

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

非常感谢。

3 个答案:

答案 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比较,cd都具有相同的值。

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

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

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进行比较,因此会产生错误。