重寫equals()方法和 hashCode()方法


java中判斷兩個對象是否相等的規則:
首先,判斷兩個對象的hashCode是否相等 
如果不相等,認為兩個對象也不相等 
如果相等,則判斷兩個對象用equals運算是否相等 
如果不相等,認為兩個對象也不相等 
如果相等,認為兩個對象相等 

我們在equals方法中需要向下轉型,效率很低,所以先判斷hashCode方法可以提高效率。

equals()相等的兩個對象,hashcode()一定相等; 
equals()不相等的兩個對象,卻並不能證明他們的hashcode()不相等。

1,所有Java類都繼承自Object類
2,Object類中有
public int hashCode(){}
public boolean equals(Object obj){}
這兩個方法及其他的方法。
在Object類中,equls()方法和==的本質是相同的,都是判斷兩個引用是否指向同一對象。
String類繼承自Object類:但String類重寫了equals()方法,
使得:equals()方法的作用是比較兩個字符串的內容是否相等;
==的作用是比較兩個引用是否指向同一個對象;
很多類都重寫了equals方法,供自己產生新的定義。
3,在本程序中:Items類繼承自Object類,並且重寫了equals()方法,不按照父類的比較方法來比較兩個對象,使得該方法能夠按照程序員自己的意願來比較兩個對象

@Items.java//解決編號沒有合並問題
@Override
public int hashCode() {
    //若getId和getName相同,則hashCode一定相同
    return this.getId()+this.getName().hashCode();
}

@Override
public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    if(this==obj)
    {
        return true;
    }
    if(obj instanceof Items)
    {
        Items i = (Items)obj;
        if(this.getId()==i.getId()&&this.getName().equals(i.getName()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}                            

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM