Objectクラスに実装されているequalsメソッドについて勉強しているのですが
参考書には「Objectクラスに実装されているequalsメソッドは参照先のインスタンスが同じ値を持っているかどうかを調べるメソッドだが、そのまま使用すると参照先の同一性だけを確認するだけで==演算子を使用した時と同じ結果になってしまうので、同値かどうかの確認をするためにはオーバーライドして設定を変える必要がある」
と書かれていました。
そしてその見本として以下のようなコードが書かれていたのですが、このコードの中でいくつか理解できない個所があります。
java
1public class Sample { 2 3 4 public static void main(String[] args) { 5 6 Test t1 = new Test(10,"A"); 7 Test t2 = new Test(10,"A"); 8 9 10 11 System.out.println(t1.equals(t2)); 12 13 } 14} 15 16class Test { 17 private int num; 18 private String name; 19 20 public Test(int num , String name) { 21 this.num=num; 22 this.name=name; 23 24 } 25 26 public boolean equals(Object obj) { 27 if (obj==null) { 28 return false; 29 } 30 if (obj instanceof Test) { 31 Test test = (Test)obj; 32 return test.num == this.num; 33 } 34 return false; 35 } 36} 37
このequalsメソッドのif (obj==null)〜の箇所は渡された引数の中身がnullかどうかを確認して
もしnullだった場合はfalseを返す、と自分では解釈しているのですがこれでいいのでしょうか?
そして次のif (obj instanceof Test) の箇所は、渡された引数がTestクラスのオブジェクトの
インスタンスであればtrueを返すということでいいのでしょうか?
ここまでは自分でも何となく理解はできそうなのですが、問題は次の処理です。
Test test = (Test)obj;
return test.num == this.num;
}
return false;
ここで一体何をやっているのかがさっぱり理解できなくて困っています。
Test test = (Test)obj⇨if文の中でTestクラスのインスタンスを作成している?
return test.num == this.num;⇨イマイチよく分からない
return false;⇨if文の外でなぜfalseを返す処理をしなければならないのか?
恐れ入りますが、どなたかわかりやすくご説明をお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/02 12:50
2019/03/03 07:33