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