您的位置:首页 > 编程语言 > Java开发

容易忽略的equals顺序问题

2017-03-25 00:00 387 查看
我们在用equals时常常不注意这个问题,a.equals(b)和b.equals(a)能一样么?答案是不一样!因此用的时候多注意不同的顺序,我也看到过说用getClass的,我不同意这种用法,毕竟getClass就屏蔽了好多子类。

public class EqualsDemo {
public static void main(String[] args) {
Father father = new Father("HS");
Son son1 = new Son(1001, "HS");
Son son2 = new Son(1002, "HS");
System.out.println(son1.equals(son2));
System.out.println(son1.equals(father));
System.out.println(son2.equals(father));
System.out.println(father.equals(son1));
}
}

class Father {
private String name;

public Father(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj) {
if (obj instanceof Father) {
Father that = (Father) obj;
return this.name.equals(that.name);
}
return false;
}
}

class Son extends Father {
private int id;

public Son(int id, String name) {
super(name);
this.id = id;
}

@Override
public boolean equals(Object obj) {
if (obj instanceof Son) {
Son that = (Son) obj;
return this.id == that.id && super.equals(that);
}
return false;
}
}

1001
false
false
false
true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java