复写equals、hashCode和toString方法

equals、hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法。

1.复写equals方法

原则:

  1. 首先,两个实例是相同的对象, 可以通过运算符instanceof来判断,注意instanceof是运算符而不是方法;也可以通过方法getClass() != o.getClass()来判断。
  2. 其次,两个实例的成员变量是相同的。

例子:

public class User {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        //如果这个两个实例是相同的,那么两个实例指向同一块堆空间,所以一定是相同的
        if (this == o)
            return true;

        if (o == null || getClass() != o.getClass())
            return false;

        User user = (User) o;

        if (age != user.age) return false;
        return name.equals(user.name);

    }

}

 

2.复写hashCode方法

原则:

  1. 如果两个实例通过equals方法判断是相同的,那么两个实例通过hashCode方法返回的结果也必须是相同的。

例子:

public class User {
    String name;
    int age;

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }
}

 

3.复写toString方法

如果没有复写这个方法,那么默认的就会打印出这个实例的类名和其对应的hash值

例子:

public class User {
    String name;
    int age;

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

 

 

 

 

 

 

 
 
 
 
 
posted @ 2015-06-17 15:19  Android小能手  Views(913)  Comments(0Edit  收藏  举报