关于这个问题,主要有两点原因
- Hashcode源码的注释中规定了,如果两个对象的equals相等,那么他们的hashcode必须相等,如果不相等,就不符合协议规定.
- 在HashSet特性是不允许重复值,列表无序,这个值比较的就是hashcode值,hashcode值是根据内存地址计算出来的,原本都没有重写的情况下,equals和hashcode源生函数都是比较的地址,所以如果对象地址一样,这俩函数返回值肯定对应于两个对象都一样,如果重写了equals函数让equals比较的是value值而不是地址值,那么就会出现equals相等,hashcode不相等的情况下,
那这个时候我new了两个对象,这俩对象肯定地址值不相等,因为new都是开辟新的空间的,也就能根据hashcode存到hashset中,但是这俩value一样,看起来好像是一个东西,这样就破坏了hashset值不允许重复的特性(尽管只是看起来重复了,内存地址却是不同的)