程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> hashcode-關系多態的問題,為何重寫了equals 卻沒有調用

hashcode-關系多態的問題,為何重寫了equals 卻沒有調用

編輯:編程解疑
關系多態的問題,為何重寫了equals 卻沒有調用

import java.util.*;

class Name{
private String firstname,secondname;
public Name(String firstname,String secondname){
this.firstname=firstname;
this.secondname=secondname;

}
public String getFirstName(){return firstname;}
public String getsecondName(){ return secondname; }
public String toString(){ return firstname+" "+secondname;}

public boolean equals(Object obj) {
if(obj instanceof Name){

return true;
} return super.equals(obj);
}

public int hashcode(){
return firstname.hashCode();

}
}

public class TestCollection {

public static void main(String[] args) {
    Collection c=new HashSet();
    c.add("hello");
    c.add(new Name("uzi","omg"));
    c.add(new Integer(100));
    c.remove("hello");      
    c.remove(new Integer(100));
    System.out.println(c.remove(new Name("uzi","omg")));    
    System.out.println(c);
}

}
程序結果如下//
false
[uzi omg]

重寫了Name 中的equals()結果依然沒變 為何沒有調用Name裡的equals??

最佳回答:


之所以你的remove操作失敗,是因為你重新的equals和hashCode不妥當,因為java約定equals和hashCode方法,要求equals返回true時,也一定要有相同的hashCode。
你要重寫equals的話,應該用Eclipse自動生成的方法,保證這一規則成立。
刪除這兩個方法,重新用Eclipse的右鍵-》source-》generate equals() and hashCode()。選擇需要用的屬性,這樣就能remove返回true了。
這篇文章寫的很詳細你可以參考下:http://www.importnew.com/16517.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved