1

1つ目はintelliJ IDEAで生成したコード、2つ目は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

効率に関しては、同等の効率です。1 番目または 2 番目のどちらを使用しても、パフォーマンスに影響はありません。ただし、オブジェクトをサブクラスのオブジェクトと比較することを「保護」し、奇妙で、予期せず、一貫性のない結果につながるため、最初の方法をお勧めします。

于 2013-09-09T15:21:48.793 に答える
1

class B extends MemberthenBを持っているinstanceof 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

最初のものは(IMHO)より正しいです。2番目のものは、クラスのサブクラスに対してもtrueを返しますが、これはあなたが望むものではないかもしれません... ( http://www.artima.com/lejava/articles/equality.htmlを参照)

于 2013-09-09T15:21:01.080 に答える