实现高质量的equals方法的诀窍_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 实现高质量的equals方法的诀窍

实现高质量的equals方法的诀窍

 2013/9/3 18:20:05  coderzhcn  程序员俱乐部  我要评论(0)
  • 摘要:1.使用==操作符检查“参数是否为这个对象的引用”。如果是,则返回true。这只不过是一种性能优化,如果比较操作有可能很昂贵,就值得这么做。2.使用instanceof操作符检查“参数是否为正确的类型”。如果不是,则返回false。一般说来,所谓“正确的类型”是指equals方法所在的那个类。有些情况下,是指该类所实现的某个接口。如果类实现的接口改进了equals约定,允许在实现了该接口的类之间进行比较,那么就使用接口。集合接口(collectioninterface)如Set、List
  • 标签:方法 实现

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;

}

}

?

上一篇: Windows下压缩成tar.gz格式 下一篇: 没有下一篇了!
发表评论
用户名: 匿名