183 total views, 3 views today
equals 默认是和==一样,判断引用是否相等的,一般需要覆写后才能实现真正的判等。
如果认为两个对象是 equal 的,那么最好使得这两个对象的 hashCode 值也是相等的,因为在往 Set 中加对象的时候,会首先用到对象的 hashCode 值。
往 HashSet 中加对象的时候,如下面的流程图:
它先根据 hashCode 来判断对象是否不相等,只要是不相等,HashSet 就认为他们肯定不是同一个对象,就可以省去 equals 的调用开销。
如果两个对象 equals 相等,但是 hashCode 不相等,会导致在 HashSet 中认为是两个不相等的对象,两个对象都会被加入到 HashSet,可能会导致程序异常。
因此,确保 equal 的对象拥有相同的 hashcode 是非常有必要的。