package com.studio.equalshashcode;
import java.util.HashSet;
class A{
@Override
public boolean equals(Object obj) {
return true;
}
}
class B{
@Override
public int hashCode() {
return 1;
}
}
class C{
@Override
public boolean equals(Object obj) {
return true;
}
@Override
public int hashCode() {
return 2;
}
}
public class HashsetTest {
public static void main(String[] args) {
HashSet books = new HashSet();
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());
System.out.println(books);
}
}
执行结果
[com.studio.equalshashcode.A@5c647e05, com.studio.equalshashcode.B@1, com.studio.equalshashcode.B@1, com.studio.equalshashcode.C@2, com.studio.equalshashcode.A@70dea4e] |
分析:①对于A对象,即使通过equals()方法比较返回true,但Hashset依然把它们当成两个对象。 ②对于B对象,hashCode()返回相同值(1),但Hashset依然把它们当成两个对象。 ③对于C对象,两方法都重写时,equals()返回true,hashCode()返回值也相同 |
源自:疯狂Java