《EffectiveJava》 笔记版二--equals和hashCode源码解析
1.Object类
Object类是所有类的基类,那么学好Object类中的方法是Java基础中的基础。Object类中常见的方法有equals(), hashCode(), toString(), clone()和与线程相关的wait(),notify()方法。
这里我们重点去查看equals()和hashCode()的源码,看看是否能看出花来。
2.覆盖equals时总要覆盖hashCode
覆盖equals时总要覆盖hashCode这成了写代码时约定俗成的规范,但是究竟为什么要同时重写这两个方法呢,只有通过源码才能窥探一二了
首先打开equals的源码:
/**
* Indicates whether some other object is "equal to" this one.
* <p>
* The {
@code equals} method implements an equivalence relation
* on non-null object references:
* <ul>
* <li>It is <i>reflexive</i>: for any non-null reference value
* {
@code x}, {
@code x.equals(x)} should return
* {
@code true}.
* <li>It is <i>symmetric</i>: for any non-null reference values
* {
@code x} and {
@code y}, {
@code x.equals(y)}
* should return {
@code true} if and only if
* {
@code y.equals(x)} returns {
@code true}.
* <li>It is <i>transitive</i>: for any non-null reference values
* {
@code x}, {
@code y}, and {
@code z}, if
* {
@code x.equals(y)} returns {
@code true} and
* {
@code y.equals(z)} returns {
@code true}, then
* {
@code x.equals(z)} should return {
@code true}.
* <li>It is <i>consistent</i>: for any non-null reference values
* {
@code x} and {
@code y}, multiple invocations of
* {
@code x.equals(y)} consistently return {
@code true}
* or consistently return {
@code false}, provided no
* information used in {
@code equals} comparisons on the
* objects is modified.
* <li>For any non-null reference value {
@code x},
* {
@code x.equals(null)} should return {
@code false}.
* </ul>
* <p>
* The {
@code equals} method for class {
@code Object} implements
* the most discriminating possible equiv