日期:2014-05-20  浏览次数:20985 次

重写hashCode使两个不同的对象的返回值相同,但equals还是相等?
Java code
class A{
    
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return 1;
    }
        public static void main(String[] args) {
        System.out.println(new A().equals(new B()));//false 这里为什么还是false??
        System.out.println(new A().hashCode()==new B().hashCode());//true
    }
    
}
class B{
    
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return 1;
    }
}


------解决方案--------------------
重写hashCode,不跟equals相同。

你需要重载equals方法,才可以呢。
------解决方案--------------------
也要重写equals
------解决方案--------------------
Java code
    public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) { // 判断目标对象是否为String
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }