equals方法的要求:
a.自反性:對于任何非空的x,x.equals(x)都應該返回true
b.對稱性:對于任何引用x和y,當且僅當x.equals(y)返回true時,y.equals(x)也應該返回true
c.傳遞性:對于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應該返回true
d.一致性:如果x和y的引用沒有發(fā)生變化,那么反復調用x.equals(y)的結果應該相同
e.對于任何非空的引用x,x.equals(null)應該返回false
創(chuàng)新互聯成立于2013年,是專業(yè)互聯網技術服務公司,擁有項目成都做網站、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元元江縣做網站,已為上家服務,為元江縣各地企業(yè)和個人服務,聯系電話:18980820575
public?class?A???{??? ???????public?boolean?equals(Object?otherObject) ??{???????//測試兩個對象是否是同一個對象,是的話返回true ???????if(this==otherObject)?return?true;???????//測試檢測的對象是否為空,是就返回false ???????if(otherObject==null)?return?false;???????//測試兩個對象所屬的類是否相同,否則返回false ???????if(getClass()!=otherObject.getClass())??return?false;???????//對otherObject進行類型轉換以便和類A的對象進行比較 ???????A?other=(A)otherObject;???????//對于值可能為null的屬性,檢測時應使用Object的equals方法,不為null的可以直接使用==檢測 ???????return?Object.equals(類A對象的屬性A,other的屬性A)&&類A對象的屬性B==other的屬性B……; ???}???? }
在子類定義equals方法時使用super.equals方法進行重載復寫。
一般來說,重寫了equals方法就同時也要重寫hashCode方法
重寫hashCode方法的原因
public?int?hashCode(){??//其中Double根據需要換成所需類型,第一個乘數因子為素數(也叫質數) ???return?7*Object.hashCode(有可能為null的屬性A)+?????????11*new?Double(不為null的屬性B).hashcode()+ ?????????…… }
或者有更簡單的方法
public?int?hashCode(){????return?Object.hashCode(屬性A,屬性B,屬性C,……); }
歡迎工作一到五年的Java工程師朋友們加入Java技術交流群:659270626
群內提供免費的Java架構學習資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調優(yōu)、Spring源碼,MyBatis,Netty,redis,Kafka,MySQL,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
文章題目:Java自定義類中重寫equals方法
網頁鏈接:http://chinadenli.net/article20/gioeco.html
成都網站建設公司_創(chuàng)新互聯,為您提供用戶體驗、App設計、域名注冊、云服務器、品牌網站建設、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯