Java:String和int变量上的equals()和===
Posted
技术标签:
【中文标题】Java:String和int变量上的equals()和===【英文标题】:Java : equals() and === on String and int variables [duplicate] 【发布时间】:2016-06-23 11:14:03 【问题描述】:我试图理解相等 (==) 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
非常感谢。
【问题讨论】:
您确定a == b
打印出false
?
【参考方案1】:
因为操作顺序,在这部分:
" c==d : " + c == d
没有括号,所以编译器会这样:
(" c==d : " + c) == d
你得到一个错误,因为string == int
没有定义。另一个例子也是同样的想法:
"Check2 : " + a == b → ("Check2 : " + a) == b → "Check2 : Hai" == "Hai" → false
【讨论】:
【参考方案2】:在进行整数运算之前需要加括号
这样做:
System.out.println(" c==d : " + (c==d));
【讨论】:
【参考方案3】:我会一一解释。
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
并且您知道我们无法将字符串与整数进行比较并且因此这将引发错误。
【讨论】:
以上是关于Java:String和int变量上的equals()和===的主要内容,如果未能解决你的问题,请参考以下文章