// 定义一个简单的类,重写 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 boolean
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站