equals方法的要求:
a.自反性:對于任何非空的x,x.equals(x)都應(yīng)該返回true
b.對稱性:對于任何引用x和y,當(dāng)且僅當(dāng)x.equals(y)返回true時(shí),y.equals(x)也應(yīng)該返回true
c.傳遞性:對于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應(yīng)該返回true
d.一致性:如果x和y的引用沒有發(fā)生變化,那么反復(fù)調(diào)用x.equals(y)的結(jié)果應(yīng)該相同
e.對于任何非空的引用x,x.equals(null)應(yīng)該返回false
publicclassA{publicbooleanequals(Object otherObject){//測試兩個(gè)對象是否是同一個(gè)對象,是的話返回trueif(this==otherObject)returntrue;//測試檢測的對象是否為空,是就返回falseif(otherObject==null)returnfalse;//測試兩個(gè)對象所屬的類是否相同,否則返回falseif(getClass()!=otherObject.getClass())returnfalse;//對otherObject進(jìn)行類型轉(zhuǎn)換以便和類A的對象進(jìn)行比較A other=(A)otherObject;//對于值可能為null的屬性,檢測時(shí)應(yīng)使用Object的equals方法,不為null的可以直接使用==檢測returnObject.equals(類A對象的屬性A,other的屬性A)&&類A對象的屬性B==other的屬性B……;? }? ? }
在子類定義equals方法時(shí)使用super.equals方法進(jìn)行重載復(fù)寫。
一般來說,重寫了equals方法就同時(shí)也要重寫hashCode方法
重寫hashCode方法的原因
publicinthashCode(){//其中Double根據(jù)需要換成所需類型,第一個(gè)乘數(shù)因子為素?cái)?shù)(也叫質(zhì)數(shù))return7*Object.hashCode(有可能為null的屬性A)+11*newDouble(不為null的屬性B).hashcode()+? ? ? ? ……}
或者有更簡單的方法
publicinthashCode(){returnObject.hashCode(屬性A,屬性B,屬性C,……);}
That's all.
需要學(xué)習(xí)資料和路線可以加Java高級(jí)交流群: ( 725633148 ) 每晚8點(diǎn)高清在線直播與你分享java企業(yè)當(dāng)下招聘人才需求,怎么學(xué)Java,和學(xué)習(xí)什么內(nèi)容,相信你了解之后對你今后學(xué)習(xí)Java會(huì)有非常大的幫助。
?