开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情
和方法是在类中定义的 Java 中两个通常被重写的equals方法。这些方法分别用于比较对象是否相等,以及为对象生成唯一标识符。hashCode``Object
该equals方法用于根据两个对象的状态和类型来确定它们是否相等。默认情况下,该equals方法检查两个对象是否是同一个实例,这意味着它们实际上是内存中的同一个对象。但是,当您覆盖该equals方法时,您可以定义自己的标准来确定两个对象是否相等。
equals以下是您可以如何覆盖自定义 Java 类中的方法的示例:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
name.equals(person.name);
}
}
在此示例中,该类Person定义了一个自定义equals方法,用于检查两个Person对象是否具有相同的名称和年龄。这是确定两个对象是否相等的常用方法,它允许您使用运算符或方法比较Person对象。==``.equals()
另一方面,该hashCode方法用于为对象生成唯一标识符。此标识符称为“哈希码”,是从对象的状态和类型派生的数值。hashCodeJava 的内置数据结构(例如HashMap和 )使用该方法HashSet来有效地存储和检索对象。
hashCode以下是您可以如何覆盖自定义 Java 类中的方法的示例:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在此示例中,该hashCode方法被重写以生成从对象的name和字段派生的哈希码。该方法用于将和字段的哈希码组合成单个哈希码。这确保了具有相同名称和年龄的两个对象将具有相同的哈希码,这对于在 或 之类的数据结构中高效存储和检索对象非常重要。age``Person``Objects.hash``name``age``Person``HashMap``HashSet
需要注意的是,重写equals方法的时候,也要重写hashCode方法。这是因为hashCode方法必须与方法一致equals,也就是说根据equals方法相等的两个对象必须具有相同的哈希码。如果您不重写该hashCode方法,则使用哈希码的数据结构可能无法正确存储和检索您的对象。
总之,方法equals和hashCode方法是Java中用于比较和识别对象的重要方法。该equals方法用于判断两个对象是否相等,该hashCode方法用于为一个对象生成唯一标识。当您在自己的自定义类中重写这些方法时,重要的是始终如一且正确地这样做,以确保您的对象按预期运行。