在比較字符型數(shù)據(jù)時(shí),==比較的是內(nèi)存中的地址,比較的是對(duì)象的句柄;而equals()比較的是地址內(nèi)的內(nèi)容,比較的是對(duì)象。由于JAVA中除基本數(shù)據(jù)類型外其它一切都是對(duì)象,而對(duì)象變量存儲(chǔ)的都是引用,相當(dāng)于C中的指針,所以在比較對(duì)象時(shí)如String,用==是比較兩個(gè)變量是否指向同一個(gè)對(duì)象,而用equals才是比較兩個(gè)String的內(nèi)容是否相等。
==絕對(duì)比equals快。
==是java內(nèi)置的,可以理解為"相同"。對(duì)于簡(jiǎn)單類型來說,a=3,b=3,我們可以說a和b相同,也可以說a和b相等,都沒什么問題。.equals()是Object的方法,可以理解為"相等"。顯然兩個(gè)object相等并不意味著相同;但是需要注意的是,也并不意味著他們對(duì)應(yīng)內(nèi)存區(qū)域的所有字節(jié)都相等,比如(但不限于這個(gè)原因)他們內(nèi)部可能還有自己的引用。所以,兩個(gè)對(duì)象是否相等,只有這個(gè)對(duì)象自己才知道如何判斷,java并不知道。所以就需要類自己提供一個(gè)equals方法。下面舉例說明:
題目:
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
下面哪些返回true
1: i==l
2: i==d
3: l==d
4: i.equals(l)
5: i.equals(d)
6: l.equals(d)
7: i.equals(42)
答案:7;
編碼驗(yàn)證:
public class Equivalence {
public static void main(String[] args) {
Integer i = new Integer(42)
Long l = new Long(42)
Double d = new Double(42.0)
System.out.println(i==l);
System.out.println(i==d);
System.out.println(l==d);
System.out.println(i.equals(l) );
System.out.println(i.equals(d) );
System.out.println(l.equals(d) );
System.out.println(i.equals(42));
}
}
運(yùn)行結(jié)果:
1-3:編譯不通過;
4-6:false
7:true
原理解釋:
1. 檢查對(duì)象是否相等
關(guān)系運(yùn)算符==和!=也適用于所有對(duì)象,但它們的含義通常會(huì)使初涉Java領(lǐng)域的人找不到北。下面是一個(gè)例子:
//: Equivalence.java
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~
其中,表達(dá)式System.out.println(n1 == n2)可打印出內(nèi)部的布爾比較結(jié)果。一般人都會(huì)認(rèn)為輸出結(jié)果肯定先是true,再是false,因?yàn)閮蓚€(gè)Integer對(duì)象都是相同的。但盡管對(duì)象的內(nèi)容相同,句柄卻是不同的,而==和!=比較的正好就是對(duì)象句柄。所以輸出結(jié)果實(shí)際上先是false,再是true。這自然會(huì)使第一次接觸的人感到驚奇。
若想對(duì)比兩個(gè)對(duì)象的實(shí)際內(nèi)容是否相同,又該如何操作呢?此時(shí),必須使用所有對(duì)象都適用的特殊方法equals()。但這個(gè)方法不適用于“主類型”,那些類型直接使用==和!=即可。下面舉例說明如何使用:
//: EqualsMethod.java
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 =