Java中檢查兩個對象是否相等,這個看起來很簡單的事情但是實際做起來不一定是一個簡單的事情。我們可能首先想到的是==運算符號,但是這個運算符真的能比較兩個對象么?我們先看下面一段代碼:
public static void main(String [] argv ){
Integer A = new Integer(47);
Integer B = new Integer(47);
System.out.println( A == B ) ;
System.out.println( A != B );
}
可能你覺得輸出的結果是true false ,但是結果正好相反,是:false,true。不要覺得奇怪,因為==實際比較的是兩個對象的句柄,而不是對象的內容,所以 A==B輸出為false, 而A != B 輸出為false.
可能以為equals方法能幫我們解決這個問題,那么來試一下,
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~
結果輸出的并不是我們所希望的true,而是false,這是因為類默認的equal方法是直接比較句柄的,而不是我們所希望的比較內容,所以我們不得不發現我們要比較兩個類的內容我們不得不在類中重寫equal()方法來實現比較兩個類的內容。