首先,为什么要重写equals()方法。我们在定义类时,我们经常会希望两个不同对象的某些属性值相同时就认为他们相同,所以我们要重写equals()方法,按照原则,我们重写了equals()方法,也要重写hashCode()方法。
Java中的超类Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致。
a. 在java应用程序运行时,无论何时多次调用同一个对象时的hashCode()方法,这个对象的hashCode()方法的返回值必须是相同的一个int值;
b. 如果两个对象equals()返回值为true,则他们的hashCode()也必须返回相同的int值;
c. 如果两个对象equals()返回值为false,则他们的hashCode()返回值也必须不同;
现在,我们到这里可以看出,我们重写了equals()方法也要重写hashCode()方法,这是因为要保证上面所述的b,c原则;所以java中的很多类都重写了这两个方法,例如String类,包装类等。