重写equals和hashCode

equals()方法
1. 自反性:A.equals(A)要返回true.

2. 对称性:如果A.equals(B)返回true, 则B.equals(A)也要返回true.

3. 传递性:如果A.equals(B)为true, B.equals(C)为true, 则A.equals(C)也要为true. 说白了就是 A = B , B = C , 那么A = C.

4. 一致性:只要A,B对象的状态没有改变,A.equals(B)必须始终返回true.

5. A.equals(null) 要返回false.
//测试

public
class Person { private int age; private String name;
   @Override
public boolean equals(Object obj){ if(this == obj){ return true; }else if(!(obj instanceof Person)){ return false; }else{ Person p = (Person) obj; return p.name.equals(name) && p.age == age; } } @Override public int hashCode(){ int result = 17; result = result * 31 + age; result = result * 31 + name.hashCode(); return result; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
//验证,如果不重写hashCode(),输出false;
   public static void main(String[] args) {
        Person p = new Person();
        p.setAge(3);
        p.setName("ff");
        Person p1 = new Person();
        p1.setAge(3);
        p1.setName("ff");
        Set<Person> set = new HashSet<Person>();  
        set.add(p);
        System.out.println(set.contains(p1));
    }
 
原文地址:https://www.cnblogs.com/start-fxw/p/7299261.html