- 首先明确
hashCode()和equals()方法的关系:- 在Java中,
hashCode()方法是用来获取对象的哈希码,这个哈希码主要用于哈希表(如HashMap、HashSet等数据结构)中确定对象的存储位置。equals()方法用于比较两个对象是否在逻辑上“相等”。 - 根据Java的规范,如果两个对象通过
equals()方法比较返回true,那么它们的hashCode()方法必须返回相同的值。但是,反过来并不一定成立。
- 在Java中,
- 当两个对象的
hashCode()相同,它们的equals()方法不一定返回true。- 例如,假设有一个简单的
Person类,它有两个属性name和age,重写hashCode()方法时只考虑age属性来生成哈希码,重写equals()方法时考虑name和age两个属性。class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { return Integer.hashCode(age); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; return this.name.equals(other.name) && this.age == other.age; } } - 可以创建两个
Person对象:Person p1 = new Person("Alice", 20);和Person p2 = new Person("Bob", 20);。这两个对象的hashCode()方法返回相同的值(因为它们的age都是20),但是它们的equals()方法返回false,因为name属性不同。
- 例如,假设有一个简单的
所以,两个对象的hashCode()相同,则equals()方法不一定返回true。