java中的equals() 和 ==

來源:互聯網
上載者:User

標籤:void   簡單   err   class   注意   object類   自己的   print   類對象   

java中處處是對象。所有類都繼承自Object基類,Object基類擁有一個equals()方法。所以無論是繼承自Object,還是override了基類的,所有類都擁有equals()方法。

    public boolean equals(Object obj) {        return (this == obj);    }

上面是Object類的equals()方法,很簡單,使用了==比較了兩個對象。
而==是java中的運算子,用在兩個對象的引用之間時,作用是比較兩個對象的地址。
所以那個類如果沒有override這個方法,在其對象上使用equals()和==是等效的。

    @Test    public void compareObject() {        StringBuffer strOne = new StringBuffer("String");        StringBuffer strTwo = new StringBuffer("String");        System.out.println(strOne==strTwo);        System.out.println(strOne.equals(strTwo));        Integer intOne = new Integer(999);        Integer intTwo = new Integer(999);        System.out.println(intOne==intTwo);        System.out.println(intOne.equals(intTwo));    }
falsefalsefalsetrue

StringBuffer也是一種字串類,需要注意的是它沒有override基類的equals方法。所以即使對象中的內容一樣,equals()返回的也是false。
而Integer類實現了它自己的equals()方法,內容同樣是999的兩個對象被equals()正確判斷為true。

下面是Integer類實現的equals()

    public boolean equals(Object obj) {        if (obj instanceof Integer) {            return value == ((Integer)obj).intValue();        }        return false;    }

如果我們自己寫的類也需要進行比較,那麼我們實現的equals()需要比較我們類對象中的內容,這樣才符合java規範。

需要注意的是,如果一個類需要重寫equals方法,那麼同時也應該重寫hashCode()方法。因為java文檔規定了,如果A.equals(B)返回為true,那麼A.hashCode()應當等於B.hashCode()。關於hashCode()還有另外一篇博文詳細介紹。

如果忽略了equals以及hashCode方法,其他程式員或者其他工具類按照標準去使用你的定製類就會出現錯誤。

java中的equals() 和 ==

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.