• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JAVAのequalsメゾットに関して)

Javaのequalsメゾットに関する疑問

このQ&Aのポイント
  • Javaのequalsメゾットについて疑問があります。
  • オブジェクトの同一性を比較するのか、同値性を比較するのかについて明確にしたいです。
  • 複数のサイトで異なる情報を見かけており、どちらが正しいのかわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • LNTakeshi
  • ベストアンサー率100% (1/1)
回答No.1

質問内容のboolean equals(Sample obj)メソッドは確かに同値性を比較するメソッドです。 何故ならあなたがそのように実装したメソッドだからです。 しかし、スーパークラスのboolean equals(Object obj)の処理は"引数が異なるため"上書きされないため、boolean equals(Object obj)は同一性を比較するメソッドとしてそのまま残っています。 したがって、次のようにboolean equals(Object obj)メソッドをオーバーライドして実装すべきかと思います。 public class Sample { private int num; public Sample(int num) { this.num = num; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if ((obj instanceof Sample) == false) { return false; } return this.num == ((Sample) obj).num; } public static void main(String[] args) { Sample s1 = new Sample(1); Sample s2 = new Sample(1); System.out.println(s1.equals(s2)); } } オーバーライドする理由の参考になるかもしれないので、次のコードを載せておきます。 Objectクラスのequalsが実行されます。 public class Sample { private int num; public Sample(int num) { this.num = num; } public boolean equals(Sample obj) { if (obj == null) { return false; } if ((obj instanceof Sample) == false) { return false; } return this.num == obj.num; } public static void main(String[] args) { Sample s1 = new Sample(1); Sample s2 = new Sample(1); System.out.println(s1.equals((Object) s2)); } } Objectクラスで元々実装されているequalsは同一性を比較するメソッドなので、これをオーバーライドして同値性を比較するようにする、というのが定番の流れかな思います。

arisato1231
質問者

お礼

ありがとうございます!

すると、全ての回答が全文表示されます。

関連するQ&A