第一,重写equals方法
(1)如下,新增一个人员Person类,测试人员的姓名是否一致,结果是false
(2)解惑:因为如果不重写equals方法,默认调用的就是 Object的equals方法(如下图),比较的是内存地址,因此上述两个person对象的equals结果是false
(3)因此重写下equals方法,如下
(4)再测试,这时结果就是true
第二个:证明重写hashcode方法的必要性。
(1)将两个对象放进set,看set的长度
(2)测试结果如下
(3)解惑:既然两个person的equals结果都是true,但是都放进set(内容不允许重复)里面,竟然还会有两个对象?
因为set判断内容是否重复,是根据hashcode方法来判断的,而Person类的hashcode方法没有重写,还是调用Object的hashcode(),而Object的hashcode()方法是根据内存地址生成hashcode的,但是p1 、p2都是new出来的,内存肯定不一样,所以hashcode也不一样,因此导致放进set里面还是会有两个对象。
(4)解决:重写hashCode方法
(5)再次测试,结果如下