看书上说只要重写在一个类中重写equals方法,那就一定要重写hashcode方法,因为两个对象只要equals返回值为true,那么他俩的hashcode就一定相同。
那为什么不可以提前先写好hashcode函数,然后在equals函数里面直接来一行if(this.hashcode() == otherObject.hashcode()) return true;else return false;就行了?
hashcode相同,两个对象可以相同,可以不同
hascode不同,两个对象必须不同。
这是hashcode的原则。
equals除了影响hashcode以外,它还有3个原则:
它必须是对称的,如果a.equals(b)成立,那么b.equals(a)必须成立,反之亦然。
它必须是自反的,a.equals(a)必须永远成立。
它必须是传递的,a.equals(b)和b.equals(c)成立,那么必须保证a.equals(c)成立。
hashcode不同,对象一定不同,而hashcode相同,对象不一定相同
而equals却要一个确定性的结果,相同就是相同,不同就是不同