## 为什么重写 equals() 时必须重写 hashCode() 方法? 根据Java规范的规定,如果两个对象相等,那么它们的哈希值必须相等。也就是说如果 `equals` 方法判断两个对象是相等的,那这两个对象的 `hashCode` 值也要相等。如果重写 `equals()` 时没有重写 `hashCode()` 方法的话就可能会导致 `equals` 方法判断是相等的两个对象,`hashCode` 值却不相等。 例如hashset集合中插入的对象重写 equals()但是没有重写 hashCode() 就会导致插入重复的元素。