[英]Why does the equals() method return false when the two objects are identical?
public class Test {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
System.out.print((o1 == o2) + " " + (o1.equals(o2)));
}
}
我以不同的答案閱讀:
==
運算符測試兩個變量是否具有相同的引用(即指向內存地址的指針)。而
equals()
方法測試兩個變量是否引用具有相同狀態(值)的對象。
在這里,由於o1
和o2
引用了兩個不同的對象,所以我明白了為什么==
返回false。
但是這兩個對象都是使用Object
類的默認構造函數創建的,因此具有相同的值。 為什么equals()
方法返回false?
除非引用引用指向同一對象,否則java.lang.Object
提供的equals()
的實現被定義為返回false
,在這種情況下,它返回true
。
這是設計使然(該方法模仿==
的行為),並鼓勵程序員為自己的class
實現自己的equals()
版本。 例如,請參閱java.lang.String#equals
,如果將另一個String
作為參數傳遞,則將比較內容 。
您必須編寫自己的equals
方法來覆蓋class Object
的equals
方法,因為如果this
對象與參數中的對象相同,則this
方法返回true
否則返回false
。
類Object的equals方法在對象上實現了最有區別的對等關系。 也就是說,對於任何非空參考值x
和y
,當且僅當x
和y
引用相同的對象( x == y
的值為true
)時,此方法才返回true
。 (有關更多信息,請閱讀Javadoc)
所有Java對象都從Object
類繼承。 因此, Object
的方法可用於所有Java對象。 這些方法之一是equals()
。
默認情況下,類Object
equals()
的實現與==
運算符相同。
如果程序員希望使用equals()
來測試對象的值相等性,則他必須重寫equals()
並提供自己的實現(該行為應符合equals()
的一般約定;請參閱Javadoc)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.