public int hashCode() { return Objects.hash(name, age); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Person person = (Person) obj; return age == person.age && Objects.equals(name, person.name); } }这段代码详细解答
时间: 2024-02-14 21:03:49 浏览: 111
重写equals和hashcode方法_equals_重写equals和hashcode方法_
这段代码是一个自定义类 `Person` 实现了 `hashCode()` 和 `equals()` 方法,以使其可以作为 `HashMap` 的键使用。
`hashCode()` 方法通过 `Objects.hash(name, age)` 计算出 `Person` 对象的哈希值,这里将 `name` 和 `age` 两个字段传入 `Objects.hash()` 方法,该方法会为它们生成一个哈希值。这个哈希值将用来定位 `Person` 对象在 `HashMap` 中的桶位置。
`equals()` 方法是用来比较两个 `Person` 对象是否相等的。首先,如果两个对象的引用地址相等,则它们一定相等,直接返回 `true`。如果对象为 `null` 或者它们的类不同,则它们一定不相等,直接返回 `false`。如果两个对象的类相同,则将它们转换为 `Person` 类型,比较它们的 `name` 和 `age` 字段是否相等,如果相等则返回 `true`,否则返回 `false`。
这两个方法的实现非常重要,因为它们是 `HashMap` 底层使用的关键方法,如果两个对象的哈希值不相等或者 equals() 方法比较不正确,就会导致 `HashMap` 查找和修改元素时出现错误。因此,自定义类作为 `HashMap` 的键时,一定要正确地实现这两个方法。
阅读全文