对象相等判断时,覆写equals方法时同时覆写hashcode方法

【错误代码】

class T {
  private String str;

  T(String str) {
    this.str = str;
  }

  public boolean equals(Object obj) {
    if(!(obj instanceof T)){
      return false;
    }
    T t = (T)obj;
    return t.equals(this.str);
  }

  //这里没有覆写hashCode方法

  public static void main(String[] args) {
    Set set = new HashSet();
    set.add(new T("str"));
    System.out.println(set.contains(new T("str")));//false
  }
}


正确用法
class T {
  private String str;

  T(String str) {
    this.str = str;
  }

  public boolean equals(Object obj) {
    if(!(obj instanceof T)){
      return false;
    }
    T t = (T)obj;
    return t.equals(this.str);
  }

//同时要覆写hashCode方法
  public int hashCode() {
    int hash = 0;
    if(str!=null){
      for(char c: str.toCharArray()){
        hash +=c;
      }
    }
    return hash;   
  }
}

你可能感兴趣的:(C++,c,C#)