hashcode() equals()
hashcode() & equals():
默认情况下:
hashcode方法是返回一个对象的hash值(int类型),利用对象地址生成一个int类型的数
equals方法是比较两个对象是否为同一个对象
从本质上来讲,两者是完全能没有什么关系的。但是在某些使用场景下,两者关系非常不一般。
比如说作为HashMap、Hashtable等散列表的key的时候,就是先比较key的hash值,相等再使用equals比较
而我们一般来说,对一些我们定制的类,我们是要去重写equals方法的,去让校验定制类实例的内容是否相等,而不是对我们没啥屌用的实例内存地址是否相等
而一旦我们重写equals方法后,我们在使用散列表时,就会出现一种情况:两个对象其实是相同的(内容),但是在hashcode()这一步就否决了,还没走到equals()
所以这是我们为什么说,重写equals()就要连同重写hashcode(),改写hashcode()逻辑就是:保证equals()返回true时,这两个对象的hashcode()也得是返回相同的int值