为什么要重写equals和hashcode? 记住: Object类中的equals方法默认比较的是对象的地址,因为只有是相同的地址才会相等(x == y),如果没有重写equals方法,那么默认就是比较的是地址。 而无论何时如果equals方法被重写那么都是有必要去重写hashCode方法,这个是因为为了维持hashCode的一般约定(general contract),相同的对象必须要有相同的hashCode值。 通过HashMap源码可知: 计算index时,覆盖操作会失败: