1 public class Bank {
2 String name;
3 String address;
4 public boolean equals (Object o) {
5 if(o == this) return true;
6 if(o == null) return false;
}
}
5番目の if(0 == this)
のthisとは何と比較しているのですか?
6番目のnull とはどのような場合ですか?
初心者ですがよろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
5番目の if(0 == this)
のthisとは何と比較しているのですか?
オブジェクトの実体を置いているアドレスを比較しています。
6番目のnull とはどのような場合ですか?
参照型の値が「何もない」ことを示す特殊な値です。
投稿2018/11/18 17:36
総合スコア20651
0
ベストアンサー
eclipse で eqiuals と hashcCode メソッドをeclipse で自動生成させてみました。
さらに euqals の先頭に this と obj の内容を println する文を追加しました。
(toString も eclipse で自動生成させました)
そして、 equal をいくつかの方法で呼び出してみました。
実行すると equals() 内部で で、this や obj がどんな値になっているかを確認してみることができます。
java
1package teratail; 2 3public class Bank { 4 private String name; 5 private String address; 6 7 public Bank(String name, String address) { 8 this.name = name; 9 this.address = address; 10 } 11 12 @Override 13 public int hashCode() { 14 final int prime = 31; 15 int result = 1; 16 result = prime * result + ((address == null) ? 0 : address.hashCode()); 17 result = prime * result + ((name == null) ? 0 : name.hashCode()); 18 return result; 19 } 20 21 @Override 22 public boolean equals(Object obj) { 23 System.out.println("equals: this:" + this + ", obj:" + obj); 24 25 if (this == obj) { 26 return true; 27 } 28 if (obj == null) { 29 return false; 30 } 31 if (!(obj instanceof Bank)) { 32 return false; 33 } 34 Bank other = (Bank) obj; 35 if (address == null) { 36 if (other.address != null) { 37 return false; 38 } 39 } else if (!address.equals(other.address)) { 40 return false; 41 } 42 if (name == null) { 43 if (other.name != null) { 44 return false; 45 } 46 } else if (!name.equals(other.name)) { 47 return false; 48 } 49 return true; 50 } 51 52 @Override 53 public String toString() { 54 return "Bank [name=" + name + ", address=" + address + "]"; 55 } 56 57 public static void main(String[] args) { 58 Bank xy = new Bank("x", "y"); 59 Bank xy2 = new Bank("x", "y"); 60 Bank xz = new Bank("x", "z"); 61 Bank z = null; 62 63 System.out.println(xy.equals(xy)); 64 System.out.println(xy.equals(z)); 65 System.out.println(xy.equals(xy2)); 66 System.out.println(xy.equals(xz)); 67 System.out.println(xy.equals("ABC")); 68 } 69}
参考情報
- 【Java】「同値」の定義はequalsメソッドをオーバーライドする
投稿2018/11/18 19:23
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
this は自分自身という意味です。
例えば、以下のようにすれば、Bank の 5 行目は o == this が true になります。
java
1Bank bank1 = new Bank(); 2bank1.equals(bank1);
もし、以下のようにすれば 5 行目の o == this は false になります。
java
1Bank bank1 = new Bank(); 2Bank bank2 = new Bank(); 3bank1.equals(bank2);
6 行目の o==null は equals で渡ってきた引数が null かどうかを判別しています。
例えば、以下のように null を渡せば、6 行目の o == null は true になります。
java
1Bank bank = new Bank(); 2bank.equals(null);
もし、以下のようにインスタンス化した引数であれば、6 行目の o == null は false です。
java
1Bank bank1 = new Bank(); 2Bank bank2 = new Bank(); 3bank1.equals(bank2);
あと、補足となりますが、equals() は 5 行目と 6 行目の条件に合わない場合の return がないので、コンパイルエラーとなってしまうので、注意してください。
投稿2018/11/18 17:45
編集2018/11/21 11:02総合スコア42
0
5 if(o == this) return true; <=== 引数として渡されたインスタンスが自分自身と等しいか?
6 if(o == null) return false <=== 引数として渡されたインスタンスが空かどうか?
投稿2018/11/18 17:35
総合スコア1430
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。