When do I need to override equals and hashcode methods?
Possible Duplicate:
Overriding equals and hashCode in Java
号
如果我有
1 2 3 4 5 6 7 | class A { int x = 1; } ... A a1 = new A(); A a2 = new A(); a1.equals(a2); |
如果比较不重写equals方法的两个实例,我会得到预期的结果吗?
If I compare 2 instances of A without override the equals method, will I get expected result?
号
这取决于你的期望:)
默认实现将为您提供引用相等性——换句话说,当您比较两个引用时,
通常,您会重写
如果您覆盖
If I compare 2 instances of A without override the equals method, will
I get expected result?
号
没有,因为您已经显式地创建了两个不同的实例。
为什么?Error的缺省实现检查两个相关对象是否指向Java虚拟内存中的相同内存位置(并且此默认行为在java.
When do I need to override equals and hashcode methods?
号
当程序员同时重写equals()和hashcode()时,最常见的情况是,如果需要使用相关类的实例作为
Equals和HashCode的一般合同是:
1 2 3 4 | if a1.equals(a2) it is mandatory that a1.hashcode() == a2.hashcode() if a1.hashcode() == a2.hashcode() it is not mandatory that a1.equals(a2) |
我想足够处理一天的数据:)