第一个是我使用intelliJ IDEA生成的代码,另一个是我通过参考Oracle教程编写的代码。
哪一个最实用,效率更高?
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
if (!email.equals(member.email)) return false;
return true;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Member) {
return email.equals(((Member) o).getEmail());
} else {
return false;
}
}
答案 0 :(得分:3)
关于效率,它们是等效的。使用第一个或第二个对性能没有影响。我更喜欢第一种,因为它“保护”你不会将对象与子类中的对象进行比较,从而导致奇怪的,不预期的和不一致的结果。
答案 1 :(得分:1)
如果我有class B extends Member
,那么B
是instanceof
Member
,因此在许多情况下它容易出错。第一种解决方案是最好的。选择ICE生成的那个。
答案 2 :(得分:1)
+1因为:
instanceof
运营商答案 3 :(得分:0)
我会选择IDE生成的那个,因为它更容易创建,并且不太可能包含错误。在极少数情况下,这是不够的,您将知道需要进行哪些更改以满足您的特定目的。
答案 4 :(得分:0)
第一个是(恕我直言)更正确。 第二个也为你的类的子类返回true,这可能不是你想要的......(见http://www.artima.com/lejava/articles/equality.html)