解決済み

JAVAのequalsメゾットに関して

  • 困ってます
  • 質問No.9616520
  • 閲覧数27
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (1/1)

public class Sample{
private int num;
public Sample(int num){
this.num=num;

public boolean equals(Sample obj){
if(obj==null){
return false;
}
return this.num==obj.num;

}
}

ここでのequalsメゾットは、object同一性を比較するものか、それともobejectの同値性を比較するものでしょうか?
また、オブジェクトクラスの中のequalsメゾットをみたら

return(this==obj);

と書かれていますが、これを見る限り同一性を比較するものだと思いますが、「objectクラスのequalsメゾットは同値性を比較するメゾット」と書かれているサイトも多くて、一体どっちが正しいでしょうか?
ご回答いただければ幸いです。よろしくお願いいたします。

※OKWAVEより補足:「Webシステム開発」についての質問です。

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

  • 回答No.1

ベストアンサー率 100% (1/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

お礼率 100% (1/1)

ありがとうございます!
投稿日時 - 2019-05-15 14:02:01
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ