说我有自己的班级
public class MyObj { /* ... */ }
它有一些属性和方法。它没有实现 equals,也没有实现 hashCode。
一旦我们调用 equals 和 hashCode,默认实现是什么?来自对象类?它们是什么?默认等于如何工作?默认的 hashCode 将如何工作以及将返回什么? == 只是检查它们是否引用同一个对象,所以很简单,但是 equals() 和 hashCode() 方法呢?
Object
:
public boolean equals(Object object) {
return this == object;
}
public int hashCode() {
return VMMemoryManager.getIdentityHashCode(this);
}
在这两种情况下,它只是比较相关对象的内存地址。
是的,来自
Object
类,因为您的类隐式扩展了 Object。 equals
只是返回 this == obj
。 hashCode
实现是本机的。只是猜测 - 它返回指向对象的指针。
如果您不提供自己的实现,则将使用从 Object 派生的实现。没关系,除非您计划将类实例放入 HashSet (任何实际使用 hashCode() 的集合),或需要检查对象相等性的东西(即 HashSet 的 contains() 方法)。否则,如果这就是您所要求的,它将无法正常工作。
借助来自 Apache Commons Lang 的 HashCodeBuilder 和 EqualsBuilder,可以很容易地提供自己的这些方法的实现。
IBM 的 developerworks 说:
在此默认实现下,两个 仅当引用相等时 指的是完全相同的对象。 同样,默认实现 Object 提供的 hashCode() 是 通过映射内存地址得出 对象的整数值。
但是,为了确保特定供应商的 Java 版本的确切实现细节,最好查看源代码(如果可用)