public class Test { public static void main(String[] args) {
Object o = new Object(){
public boolean equals(Object obj){
return true;
}
};
Animal a = new Animal();
System.out.println(o.equals(a));
}
}
class Animal{

}
注意:这段代码没有重写hasCode(),但是执行返回的是true
但是scjp考试指南上明确的写着:“如果两个对象相等,则他们的hascode也必须相等,而Object类中的默认哈希码方法总是为每个对象产生一个唯一号,即使重写的equals()方法认为两个或多个对象相等也是这样”问题是:为什么执行结果和理论不相符合????谁能解释下

解决方案 »

  1.   

    大哥,你把那个方法好好看看。它好像只能返回true哦...不要有定向思维哦...
      

  2.   

    你让他返回true了,他当然返回true了。你已经重载了他的equals方法
      

  3.   

    你重写了这个方法,按照你看书本上的话,你应该也重写hashCode()方法,这样才符合理论。在一个hashCode在这里用不上,主要是在hashtable,hashMap里面
      

  4.   

    尽信书不如无书.不要迷信理论.hashCode()方法只是是为HashMap,HashSet(其实也是用HashMap实现的)等类服务的.你要清楚System.out.println(o.equals(a));这里就是调用了重写的equals方法,并没有什么其它隐藏的trick在里面了.
      

  5.   

    你现在应该先把基础搞清楚,至少做一个小项目,再去考虑什么scjp
      

  6.   

    实体类要比较大小、相等与否,要重写Object类的@Override
    public boolean equals(Object arg0) {
    //TODO Auto-generated method stub
    return super.equals(arg0);
    }@Override
    public int hashCode() {
    //TODO Auto-generated method stub
    return super.hashCode();
    }
    方法,看楼主的代码明显的问题是方法中有方法,编译都有问题。
      

  7.   

    你不是重写了equals方法,让它返回true了吗?当然返回结果为true了,scjp的题其实并不难,你只要把基础弄会,在把scjp的题做会就行了!
      

  8.   

    实质是: hashCode方法在Set中才会被用到,所以在写与Set和Map无关的东西时,可以不重写,呵呵