在下面的示例中,我创建了两个内部结构完全相同的对象。两者都只携带值1作为实例变量。我的想法是,如果我采用的哈希值e1应与的哈希值相同e2,因此e1.equals(e2)应返回true。
class EqualsChecker {
public static void main(String[] args) {
Elem e1 = new Elem(1);
Elem e2 = new Elem(1);
System.out.println(e1); // EqualsChecker$Elem@6ff3c5b5
System.out.println(e2); // EqualsChecker$Elem@3764951d
System.out.println("e1.equals(e2): " + e1.equals(e2)); // returns false
}
static class Elem {
private int v;
public Elem(int i) {
this.v = i;
}
}
}
为什么equals在这里返回false?
问题来源:Stack Overflow
equals(Object)的默认实现检查这两个对象是否是同一实例(即它们==)。如果您需要一些不同的逻辑,则必须自己实现。请注意,如果执行此操作,则还应该实现自己的hashCode(),以便两个相等的对象也将具有匹配的哈希码。例如:
class Elem {
private int v;
@Override
public boolean equals(final Object o) {
if (o == null || this.getClass() != o.getClass()) {
return false;
}
Elem elem = (Elem) o;
return this.v == elem.v;
}
@Override
public int hashCode() {
return this.v;
}
}
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。