2016-03-09 29 views
0

我想了解等于(==)equals()方法,但无法推理出这种行为。 有人可以用下面的println语句解释这种行为。Java:equals()和=== String和int变量

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

你确定'一== B'打印'FALSE'? – user2004685

回答

6

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

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

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

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

而且由于string == int没有定义,你得到一个错误。对于另一个例子,这是相同的想法:

"Check2 : " + a == b → ("Check2 : " + a) == b → "Check2 : Hai" == "Hai" → false 
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,因为ab都指向字符串池中的相同引用。

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

这将打印true因为字符串a的含量等于字符串b的内容。

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

这将抛出一个错误,因为它会被解析为字符串c==dint c转换成字符串(因为超载)级联等于int d如你所知,我们不能使用整数,因此这个比较字符串会抛出一个错误。

1

你需要做的整数运算

做这种方式前加括号:

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