1. 程式人生 > >“==”和equals()方法到底有什麼區別

“==”和equals()方法到底有什麼區別

  • 兩個物件是否相等的含義

“==”和equals()都屬於物件的關係運算中的比較相等。那麼判斷一個類的兩個物件是否相等有什麼含義呢?

有兩層含義:
①判斷它們是否引用同一個例項;
②當兩個物件分別引用同一個例項時,判斷它們的例項值是否相等。一般情況下,兩個例項值相等,是指它們的各成員變數值分別對應相等。

  • 圖解

類(引用資料型別)使用==、!=運算子比較兩個物件是否引用同一個例項。一個類的equals方法用於比較該類的兩個物件是否相等,包括引用同一個例項和分別引用兩個例項兩種情況,==關係運算和equals()方法的含義如下:
圖解
(a) i和j都是基本資料型別變數,i==j比較兩變數值是否相等,不比較地址;
(b) 將d1物件賦值給d2物件,兩個物件引用同一個例項,d1==d2 ? true,d1.equals(d2)返回true;
(c) d2引用由d1拷貝構造的例項,d1==d2 ? false,d1.equals(d2)返回true;

記住,字串的比較基本上都是使用equals方法。
如果一個類梅雨自己定義equals方法,那麼它將繼承Object類的equals方法,Object類的equals方法發實現程式碼如下:

boolean equals(Object o){
return this==o;
}

這說明,如果一個類沒有自己定義equals方法,它預設從Object類繼承的equals方法就是使用==操作符,也是在比較兩個變數指向的物件是否是同一個物件,這時候使用equals和==是同樣的結果,如果比較的是兩個獨立的物件則總返回false。

另外,物件運算子instanceof判斷一個物件所引用的例項是否屬於指定類,運算結果為boolean型。例如:

Person p=new Person();
d instanceof Person     //結果是true,p是Person類的例項。