1.使用==caozuofu.html" target="_blank">操作符检查“参数是否为这个对象的引用”。如果是,则返回true。这只不过是一种性能优化,如果比较操作有可能很昂贵,就值得这么做。
2.使用instanceof操作符检查“参数是否为正确的类型”。如果不是,则返回false。一般说来,所谓“正确的类型”是指equals方法所在的那个类。有些情况下,是指该类所实现的某个接口。如果类实现的接口改进了equals约定,允许在实现了该接口的类之间进行比较,那么就使用接口。集合接口(collection interface)如Set、List、Map和Map.Entry具有这样的特性。
3.把参数转换成正确的类型。因为转换之前进行过instanceof测试,所以确保会成功。
4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中对应的域相匹配。
public class User {
?
private int id;
private String name;
private int age;
private String description;
?
public User(){
?
}
?
public User(int id, String name, int age, String description) {
super();
this.id = id;
this.name = name;
this.age = age;
this.description = description;
}
?
public int getId() {
return id;
}
?
?
public void setId(int id) {
this.id = id;
}
?
?
public String getName() {
return name;
}
?
?
public void setName(String name) {
this.name = name;
}
?
?
public int getAge() {
return age;
}
?
?
public void setAge(int age) {
this.age = age;
}
?
?
public String getDescription() {
return description;
}
?
?
public void setDescription(String description) {
this.description = description;
}
?
@Override
public boolean equals(Object o) {
//为了避免不必要的空指针异常麻烦
if(o==null){
return false;
}
//为了避免不是User类型的对象
if(!(o instanceof User)){
return false;
}
?
//以下才是正式的比较两个User对象是不是同一个对象的方法
User user = (User)o;
?
if(user.getName().equals(this.name) && user.getId() == this.id){
return true;
}
?
return false;
}
?
@Override
public int hashCode() {
return this.name.hashCode() + this.id;
}
}
?