質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

847閲覧

javaの比較内容についてです

kokok

総合スコア145

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/11/18 17:13

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

5番目の if(0 == this)
のthisとは何と比較しているのですか?

オブジェクトの実体を置いているアドレスを比較しています。

6番目のnull とはどのような場合ですか?

参照型の値が「何もない」ことを示す特殊な値です。

投稿2018/11/18 17:36

swordone

総合スコア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メソッドをオーバーライドする

https://pointsandlines.jp/java/equals

投稿2018/11/18 19:23

katoy

総合スコア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
geo

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/11/18 19:01

3番目の例は代入演算子=を書き忘れておられます
geo

2018/11/21 11:02

ご指摘ありがとうございます。 修正させていただきました。
guest

0

5 if(o == this) return true; <=== 引数として渡されたインスタンスが自分自身と等しいか?
6 if(o == null) return false <=== 引数として渡されたインスタンスが空かどうか?

投稿2018/11/18 17:35

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問