在重写任何类的equals方法是必须遵循以下几点:
1、对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
2、反射性:x.equals(x)必须返回是“true”。
3、类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
4、还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
5、任何情况下,x.equals(null),永远返回是“false”;
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-10/72540.htm
实现标准equals流程如下:
public class EqualsTest {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean equals(Object o){
if (this == o)
{
return true; //此时两者相同
}
if (o == null)
{
return false;
}
if (! (o instanceof EqualsTest))
{
return false; //不同类
}
EqualsTest e = (EqualsTest)o; //强制转换
if (e.name.equals(this.name) && e.age == this.age)
{
return true;
}else
{
return false;
}
}
public EqualsTest(){}
public EqualsTest(String name,Integer age)
{
this.name = name;
this.age = age;
}
public static void main(String[] args) {
EqualsTest test1 = new EqualsTest("aaa",10);
EqualsTest test2 = new EqualsTest("bbb",10);
EqualsTest test3 = null;
String test4 = new String("ccc");
System.out.println(test1.equals(test1)); //true
System.out.println(test1.equals(test3)); //false
System.out.println(test1.equals(test4)); //false
System.out.println(test1.equals(test2)); //false
}
}