1、对象比较是否相等的两种方法
1、通过“==”进行比较,这种比较的是两个对象的引用地址是否相同,即两个引用地址是否指向了同一对象
2、通过equals()方法进行比较,但是在Object类的源码中我们可以看到:因此它实际上还是通过方法1进行比较的。但是我们可以重写equals()方法。
2、为什么重写equals()方法就必须重写hashcode()方法呢?
equals - 保证比较对象是否是绝对相等的
hashCode - 保证在最快的时间内判断两个对象是否相等,可能有误差值
一个是保证可靠,一个是保证性能。也就是说:
同一个对象的hashCode一定相等,不同对象的hashCode也可能相等,这是因为hashCode是根据地址hash出来的一个int 32 位的整型数字,相等是在所难免,这里可以想象一下hash的链表图。
equals比较的是两个对象的地址,同一个对象地址肯定相同,不同的对象地址一定不同,可靠性是这么来的。
在Hibernate中,如果是在同一个session中根据相同查询所得到的相同记录,则它们会拥有相同的Java识别
如果有必要比较通过查询后两个对象的内容是否相同,必须重写 equals()与hashCode()。