1

第一个是我使用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;
    }
}
4

5 回答 5

3

关于效率,它们是等效的。无论您使用第一个还是第二个,都不会影响性能。不过,我更喜欢第一个,因为它“保护”您不会将对象与子类中的对象进行比较,这会导致奇怪的、意外的和不一致的结果。

于 2013-09-09T15:21:48.793 回答
1

如果我有一个class B extends Memberthen Bis aninstanceof Member因此它在很多情况下很容易出错。第一个解决方案是最好的。选择IDE生成的那个。

于 2013-09-09T15:21:47.613 回答
1

+1 生成,因为:

  • 你不会犯错误
  • 编码速度更快
  • 没有instanceof运营商
于 2013-09-09T15:40:41.000 回答
0

我会选择由 IDE 生成的那个,因为它更容易创建并且不太可能包含错误。在极少数情况下,它还不够,您会知道需要进行哪些更改才能满足您的特定目的。

于 2013-09-09T15:20:18.200 回答
0

第一个是(恕我直言)越正确。第二个也为你的类的子类返回 true,这可能不是你想要的......(见http://www.artima.com/lejava/articles/equality.html

于 2013-09-09T15:21:01.080 回答