【发布时间】:2011-05-29 04:02:09
【问题描述】:
我正在更深入地学习哈希码并认为:
1.如果你重写equals(),你也必须重写hashcode()。
2。要查找 2 个对象是否是同一个对象,请使用 == 运算符
鉴于这两个因素,在 Java 中,我假设当 == operator 用于比较 两个实例是否相同时,
if(object1 == object2)
确实在做
if(object1.hashcode() == object2.hashcode())
但是运行下面的测试似乎我错了。
public class Main {
public static void main(String[] args){
Obj1 one = new Obj1();
Obj1 two = new Obj1();
//is this calling hashCode() in backend???
if(one == two) {
System.out.println("same");
}
else {
System.out.println("nope");
}
//this is of course return true
if(one == one) {
System.out.println("one and one is same");
}
}
}
class Obj1 {
@Override
public int hashCode() {
System.out.println("hashCode() is called");
return 111;
}
@Override
public boolean equals(Object another) {
System.out.println("equals() is called");
return false;
}
}
根据使用== operator 的测试,看看equals() 是否被调用,它不是。
所以我的问题是== operator 是否可以用来比较对象是否相同,覆盖 equals() 和 hashCode() 比较方法的意义何在? == operator 不是已经做好了吗?
参考:
Overriding hashCode() - is this good enough?
http://mindprod.com/jgloss/hashcode.html
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)
【问题讨论】:
-
@All:谢谢大家的解释。这就是我喜欢stackoverflow的原因。很多聪明人可以描述和给出很好的例子,比只提供定义的官方文档要好得多:D
标签: java operators equals hashcode