簡體   English   中英

當兩個對象相同時,為什么equals()方法返回false?

[英]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()方法測試兩個變量是否引用具有相同狀態(值)的對象。

在這里,由於o1o2引用了兩個不同的對象,所以我明白了為什么==返回false。

但是這兩個對象都是使用Object類的默認構造函數創建的,因此具有相同的值。 為什么equals()方法返回false?

除非引用引用指向同一對象,否則java.lang.Object提供的equals()的實現被定義為返回false ,在這種情況下,它返回true

這是設計使然(該方法模仿==的行為),並鼓勵程序員為自己的class實現自己的equals()版本。 例如,請參閱java.lang.String#equals ,如果將另一個String作為參數傳遞,則將比較內容

您必須編寫自己的equals方法來覆蓋class Objectequals方法,因為如果this對象與參數中的對象相同,則this方法返回true否則返回false

類Object的equals方法在對象上實現了最有區別的對等關系。 也就是說,對於任何非空參考值xy ,當且僅當xy引用相同的對象( x == y的值為true )時,此方法才返回true (有關更多信息,請閱讀Javadoc)

所有Java對象都從Object類繼承。 因此, Object的方法可用於所有Java對象。 這些方法之一是equals()

默認情況下,類Object equals()的實現與==運算符相同。

如果程序員希望使用equals()來測試對象的值相等性,則他必須重寫equals()並提供自己的實現(該行為應符合equals()的一般約定;請參閱Javadoc)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM