為什么我重寫了equals方法結果還是返回false呢
第一種,我用了老師介紹的equals重寫方法
@Override public?boolean?equals(Object?obj){ if(this?==?obj){ return?true; } if(obj?==?null) return?false; if(!(obj?instanceof?Course)) return?false; Course?course?=?(Course)obj; if(this.name?==?null){ if(course.name?==?null) return?true; else return?false; }else{ if(this.equals(course.name)) return?true; else return?false; }
這是我contains方法中的代碼以及實現結果
public?void?testListContains(){ //取得備選課程序列的第0個元素 Course?course?=?coursesToSelect.get(0); //打印輸出coursesToSelect是否包含course對象 System.out.println("取得對象"+course.name); System.out.println("備選課程中是否包含課程:"?+course.name?+?":"?+? coursesToSelect.contains(course)); //提示輸入課程名稱 System.out.println("請輸入課程名稱"); String?name?=?console.next(); //創建一個新的課程對象,ID和名稱 Course?course2?=?new?Course(); course2.name?=?name; System.out.println("新創建對象"+course2.name); System.out.println("備選課程中是否包含課程:"?+course2.name?+?":"?+? coursesToSelect.contains(course2)); //創建一個新的課程對象,ID和名稱,與course對象完全一樣 Course?course3?=?new?Course(course.id,course.name); System.out.println("新創建對象"+course3.name); System.out.println("備選課程中是否包含課程:"?+course3.name?+?":"?+? coursesToSelect.contains(course3)); }
第二次我直接用JAVA中自動生成的重載equals方法
@Override public?boolean?equals(Object?obj)?{ if?(this?==?obj) return?true; if?(obj?==?null) return?false; if?(getClass()?!=?obj.getClass()) return?false; Course?other?=?(Course)?obj; if?(id?==?null)?{ if?(other.id?!=?null) return?false; }?else?if?(!id.equals(other.id)) return?false; if?(name?==?null)?{ if?(other.name?!=?null) return?false; }?else?if?(!name.equals(other.name)) return?false; return?true; }
結果卻是:
實在是不知道哪里出錯了,求解答
2016-11-26
17行改成this.name.equals(Course.name)
2016-11-14
你自己寫的判斷條件寫錯了,在你重寫equals方法里面的17行,你寫的是this.equals(course.name),用對象和成員變量相比,肯定判斷錯誤,然后進入else的判斷,返回false。
望采納,謝謝。