public static void main(String[] args) {
Emp e1 = new Emp("chenssy", "23");
Emp e2 = new Emp("chenssy", "24");
Person p = new Person();
p.name = "chenssy";
System.out.println(p.equals(e1));
System.out.println(p.equals(e2));
System.out.println(e1.equals(e2));
}
public static float getFloat(int i) {
return 0.00012f * i;
}
public static class Person {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj.getClass().equals(Person.class)) {
Person pp = (Person) obj;
if (pp.name == null || name == null) {
return false;
} else {
return name.equalsIgnoreCase(pp.name);
}
}
return false;
}
}
public static class Emp extends Person {
String id;
public Emp(String name, String id) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (obj.getClass().equals(Emp.class)) {
Emp e = (Emp)obj;
return super.equals(obj) && e.id.equalsIgnoreCase(id);
}
return false;
}
}
由上面代码e1,e2和p1,预期应该是false, false, false,然而实际输出为:
false
false
false
故在 覆写equals时推荐使用getClass进行类型判断。而不是使用instanceof。
参考来源:java提高篇(十三)—–equals()方法总结