改寫equals 方法時請遵守的約定

來源:互聯網
上載者:User

 

package EffectiveJava;import static java.lang.System.out;// 一個違反對稱性的類class CaseString{private String s;public CaseString(String s) {this.s = s;}@Override //這個方法的目的是為了使CaseString 和 String 可以互操作,但這是做不到的,只會違反的equals的對稱性public boolean equals(Object o) { //該方法違反了對稱性,即CaseString.equals(String) 而 String not equals (CaseString) ,String 只能equals Stringif(o instanceof String)return s.compareToIgnoreCase((String)o)==0;if(o instanceof CaseString)return s.compareToIgnoreCase(((CaseString)o).s)==0;return false;}}public class _3_7_equals {public static void main(String args[]) {CaseString s1 = new CaseString("abc");String s2 = "abc";out.println(s1.equals(s2));out.println(s2.equals(s1));}}/** * 還有一個Point類的經典例子 * Point類(int x,int y) * |———— ColorPoint(int x,int y,Color) *  *  *//** * 編寫 equals 的步驟 * 1. 用 == 對其進行是否同一對象引用的判斷,有利於效率的提高 * 2. instanceof 類型判斷,相同,true 否則 false ,如果是對於同一介面類型的判斷,如果Collection 集合的判斷,只要繼承了List介面,就可以接下來的判斷了 * 3. 實參轉換成正確的類型 * 4.對類型中的關鍵域進行匹配,如非 Double Float的基本類型,直接== 判斷,如果是Double Float 要將其轉換成 long 或 int 再用 == 進行判斷 * 對於數群組類型的判斷,要遍曆其中的每一個類型進行判斷,可以使用AbstractList 類中的方法 * return (o1==o2) || (o1!=null && o1.equals(o2)) * 5.對於修改equals 方法時,總要修改 hashCode 方法 * 6.equals方法的參數為Object類型,不要將其修改為其他類型,否則的話,則為重載,而不是重寫了 *  *  * / */

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.