私は以下のコードをオンラインで見ました。クラスはObjectクラスのhashCode()メソッドおよびequalsメソッドをオーバーライドします。私は、なぜequals()メソッドのreturn文が代わりの& &と||を使用しなければならないのか不思議に思っていましたか?私はちょうど& &を使用することができますか?代替のものを使用しなければならない特別な理由はありますか?& &と||なぜオーバーライドequals()メソッドのreturn文は、代わりの&&と||を使用する必要がありますか?
class Person {
private int id;
private String firstName;
private String lastName;
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
Person guest = (Person) obj;
return id == guest.id
&& ((firstName == null ? guest.firstName == null : firstName.equals(guest.firstName))
|| (firstName != null && firstName.equals(guest.getFirstName())))
&& ((lastName == null ? guest.lastName == null : lastName.equals(guest.lastName))
|| (lastName != null && lastName.equals(guest.getLastName())));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + id;
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
}
としてそれを書き換えるお勧めします。私はそれを複数のif文に分割して読みやすくすることをお勧めします。 – Eran
これは必要ありません。私はこれをこのようにして見たことがありません。それを書いた人は、equalsコールでターゲットを裏返しました。私はそれが過剰な注意と理解の不足だと思う。 guestがnullの場合、このメソッドはfalseを返します。だから、ゲストがnullになる可能性についてどうして心配ですか?おそらく、それはひどくやり遂げられた何かのための修正です。 – duffymo
私の知る限り、このメソッドは論理的に間違ったコードを持ち、予期しない出力を与えることがあります。しかし、ちょっと@トニースターク、あなたはいつもジャービスを頼むことができます! – Hackerdarshi