默认的.equals和.hashCode如何为我的类工作?
说我有我自己的班级
public class MyObj { /* ... */ }
它有一些属性和方法。 它不实现equals,不实现hashCode。
一旦我们调用equals和hashCode,什么是默认实现? 从Object类? 它们是什么? 默认等于如何工作? 默认的hashCode将如何工作,返回什么? ==会检查它们是否引用同一个对象,所以它很容易,但equals()和hashCode()方法呢?
是的,默认实现是Object(一般来说,如果您从重新定义equals和/或hashCode的类继承,那么您将使用该实现)。
从文档:
equals
Object类的equals方法实现对象上最可能的等价关系; 也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x == y的值为true)时,此方法返回true。
hashCode
尽可能合理实际,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
从其中一个JVM实现中的Object
:
public boolean equals(Object object) {
return this == object;
}
public int hashCode() {
return VMMemoryManager.getIdentityHashCode(this);
}
在这两种情况下,它只是比较有问题的对象的内存地址。
Object中有equals()
和hashCode()
默认实现。 如果你不提供你自己的实现,那些将被使用。 对于equals()
,这意味着一个==
比较:只有它们是完全相同的对象时,这些对象才会相等。 对于hashCode()
,Javadoc有一个很好的解释。
有关更多信息,请参阅Effective Java,第3章(pdf),第8项。
链接地址: http://www.djcxy.com/p/71625.html上一篇: How default .equals and .hashCode will work for my classes?
下一篇: How to get the unique ID of an object which overrides hashCode()?