equals() 与 == 的区别是什么?
- == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象。
- equals() : 它的作用也是判断两个对象是否相等。
hashCode() 的作用
hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
- 如果两个对象相等,那么它们的hashCode()值一定要相同;
- 如果两个对象hashCode()相等,它们并不一定相等。
hashCode的算法不保证每个对象生成的结果都不一样
需要注意记住的事情
- 尽量保证使用对象的同一个属性来生成hashCode()和equals()两个方法。在我们的案例中,我们使用员工id。
- eqauls方法必须保证一致(如果对象没有被修改,equals应该返回相同的值)
任何时候只要a.equals(b),那么a.hashCode()必须和b.hashCode()相等。 - 两者必须同时重写。
当使用ORM的时候特别要注意的
- 如果你使用ORM处理一些对象的话,你要确保在hashCode()和equals()对象中使用getter和setter而不是直接引用成员变量。因为在ORM中有的时候成员变量会被延时加载,这些变量只有当getter方法被调用的时候才真正可用。
- 例如在我们的例子中,如果我们使用e1.id == e2.id则可能会出现这个问题,但是我们使用e1.getId() == e2.getId()就不会出现这个问题。
参考