在CSDN下的一个.CHM文件  <<不可不看的JAVA面试题>> 面试题集2中
39,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?  答: 不对,有相同的hash code。 

解决方案 »

  1.   

    package cn.aaron.java;class Member{
    String name;

    Member(String name){
    this.name=name;
    }

    public boolean equals(Member member){
    if (this.getName().equals(member.getName())){
    return true;
    } else{
    return false;
    }
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }public class Test0825 {
    public static void main(String[] args){
    Member a = new Member("a");
    Member b = new Member("a");
    System.out.println(a.equals(b));
    System.out.println(a.hashCode()==(b.hashCode()));
    }
    }答案是错的吧.  值相等完全是有可能hashCode()不同吧.   自己写的个测试下.
      

  2.   

    class test{
    Integer i;
    String str;

    public boolean equals(Object o){
    return i.equals(o);
    }
    public int hashCode(){
    return str.hashCode();
    }
    }
      

  3.   

    可以看api文档的说明: 
    hashCode
    public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。 
    hashCode 的常规协定是: 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 
    如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。 
    如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。 equals
    public boolean equals(Object obj)注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 这是一种约定,但不是强制实现的,所以"两个对象值相同(x.equals(y) == true),但却可有不同的hash code"这句话可以认为是正确的,只是没有遵从java的约定而已.
    其实现实中很多人有这样的问题,重写equals()方法却不重写hashcode方法.
      

  4.   

    反正我些代码时候 不重写 HashCode()的话 就不能把2个内容相同对象判断相等
    具体也搞不清楚
      

  5.   

    楼主够狠,重写了equals方法还来骗人,呵呵
      

  6.   

    重写了equals方法,就得再重写  hashcode()   不然你重写equals方法就没意义了
      

  7.   

    hsahcode 有相同的可以用equals 来弥补
      

  8.   


    不是一码事。
    equals方法又不会根据hashcode()的值来判断是否相等。
      

  9.   

    这是一种约定:如果两个对象根据equals方法比较是相等的,则调用任一对象的hashCode()方法必须返回相同的结果,在API文档中这样说的:
    Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
      

  10.   

    受益匪浅啊,原来在hibernate里写bean的时候都没注意~~