import java.util.HashSet;
public class TestEquals {
public static void main(String args[]) {
HashSet a1 = new HashSet();
Person a = new Person("he", 23);
Person b = new Person("he", 23);
Person c = new Person("he", 23);
a1.add(a);
a1.add(b);
a1.add(c);
//从这个输出语句可以看出,a1中返回三个相同的hashCode
System.out.println(a1);
//a和b引用的是对象的地址值,但是在用“==”用等号验证的时候返回false
System.out.println(a ==b);
//而用equals验证的时候,返回的也是false,因为equals函数默认情况下调用的也是“==”
//下面就是调用的equals
// public boolean equals(Object obj) {
// return (this == obj);
// }
System.out.println(a.equals(b));//false
System.out.println(a.toString());
System.out.println(b.toString());
//在举一例子,这两个字符串不相同
String aString = "Aa";
String bString = "BB";
//在输出的时候,它们的hashcode是相同的,都是2112,但是执行equals时,返回的是false
System.out.println(aString.hashCode());//2112
System.out.println(bString.hashCode());//2112
System.out.println(bString.equals(aString));//false
//综上所知,hashcode相同,不一定能保证两个对象时同一个对象,
//为了安全起见,在使用HashSet的情况下,最好要同时重写equals()和hashcode()方法
}
}
class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public int hashCode() {
Object o;
return 60;
}
}
class PersonDemo {
}
|