// 定义一个简单的类,重写 hashCode 方法
public class Person {
    private String name;
    private int age;
    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 重写 hashCode 方法
    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }
    // 重写 equals 方法(通常与 hashCode 一起重写)
    @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 && (name != null ? name.equals(person.name) : person.name == null);
    }
    // 测试 hashCode 方法
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice", 25);
        System.out.println("person1 的 hashCode: " + person1.hashCode());
        System.out.println("person2 的 hashCode: " + person2.hashCode());
        // 检查两个对象的 hashCode 是否相等
        System.out.println("person1 和 person2 的 hashCode 是否相等: " + (person1.hashCode() == person2.hashCode()));
        // 检查两个对象是否相等
        System.out.println("person1 和 person2 是否相等: " + person1.equals(person2));
    }
}hashCode() 方法:用于生成对象的哈希码。哈希码是一个整数,通常用于哈希表(如 HashMap)中快速查找对象。为了确保哈希表的正确性,当两个对象相等时,它们的哈希码也必须相等。
equals() 方法:用于判断两个对象是否相等。根据 Java 的规定,如果两个对象通过 equals() 方法返回 true,那么它们的 hashCode() 方法也必须返回相同的值。
示例代码:创建了两个 Person 对象 person1 和 person2,它们具有相同的属性值。通过打印它们的 hashCode 和调用 equals() 方法,验证了这两个对象的哈希码和相等性。
为什么重写 hashCode() 和 equals():默认情况下,Object 类的 hashCode() 和 equals() 方法是基于对象的内存地址的。如果我们不重写它们,即使两个对象的内容相同,它们的 hashCode() 也会不同,equals() 也会返回 false。
上一篇:java 算法
下一篇:java断言
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站