【发布时间】:2019-10-24 17:53:07
【问题描述】:
我在想一个问题,如果hashcode函数为假但equal函数为真,会发生什么?例如:
public class Demo {
private int age;
private String name;
//getter
//setter
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Demo demo = (Demo) o;
return age == demo.age &&
Objects.equals(name, demo.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name)
+ (new Random().nextInt(1000));
}
}
【问题讨论】:
-
哈希码不是假的,你只是对相等的对象有不同的哈希码。
-
如果您尝试将这样的对象放入哈希集中,或者作为哈希映射中的键,容器将无法正常工作。
-
没关系,除非你做的事情需要相等的对象具有相等的哈希值。例如,您是否尝试过将对象添加到 HashSet?