Answers:
是的,从Object
类开始,因为您的类隐式扩展了Object。equals
简单地返回this == obj
。hashCode
实现是本地的。只是一个猜测-它返回指向对象的指针。
如果您不提供自己的实现,则将使用从Object派生的实现。可以,除非您打算将类实例放入即HashSet(实际上使用hashCode()的任何集合)或需要检查对象是否相等的东西(即HashSet的contains()方法)。否则,如果您要这样做,它将无法正常工作。
这是很容易给自己的机制,这些得益于方法的HashCodeBuilder和EqualsBuilder从阿帕奇共享郎。
Foo
和Bar
是对可变类型的两个不同实例的引用,并且存在一种方法(例如SomeMutatingMethod
)Foo.SomeMutatingMethod()
不会影响Bar
它的相同方式,则Foo
该差异应足以将对象视为不相等。
IBM的developerWorks说:
在此默认实现下,两个引用仅在引用完全相同的对象时才相等。同样,对象提供的hashCode()的默认实现是通过将对象的内存地址映射到整数值而派生的。
但是,为了确保特定供应商的Java版本的确切实现细节,最好将其视为源(如果有)。
v6u23 ea
:public native int hashCode();