標籤: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() 和 ==