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

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

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

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

Q&A

解決済

2回答

541閲覧

Java equalseメソッド

kurodachikara

総合スコア1

Java

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

0グッド

0クリップ

投稿2021/04/13 06:00

Java SE 8 Silverの勉強中なのですが、
下記のコードを実行してなぜfalseが返されるのかがわかりません。
Objectクラスのequalsメソッドをオーバーライドして、同値性の判定をしているつもりです。
元々の設問では、if文がなくて、instanceofで判定していないのにダウンキャストして
ClassCastExceptionが発生するというものでした。
if文を付け加えて例外はスローされなくなりましたが、falseになる理由がどうしてもわからないので
解説をして頂きたいです。宜しくお願い致します。

class A{
private int num;
public A(int num){
this.num=num;
}
public boolean equals(Object obj){
if(obj instanceof A){
A a=(A) obj;
return this.num==a.num;
}
return false;
}
}
class B{
private int num;
public B(int num){
this.num=num;
}
public boolean equals(Object obj){
if(obj instanceof B){
B b=(B) obj;
return this.num==b.num;
}
return false;
}
}
public class Main {
public static void main(String[] args) {
A a=new A(10);
B b=new B(10);
System.out.println(a.equals(b));
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

K_3578

2021/04/13 06:04

ソースコードはMarkDownの<code>ブロック内に貼り付けてご提示ください。 質問は編集できますので。
K_3578

2021/04/13 06:45

BA選んで放置せずに質問文は編集しといて下さい
guest

回答2

0

Objectクラスのequalsメソッドをオーバーライドして、同値性の判定をしているつもりです。

はい、正しく実装できています。別の型の値を投げた場合、instanceofによる判定が成立しませんので、ifの中には入らず、return falseへ進みます。


一般に、別なクラスから生成したオブジェクトをequalsで一致するように実装すべきではありません。

投稿2021/04/13 06:05

maisumakun

総合スコア146018

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

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

kurodachikara

2021/04/13 06:42

回答ありがとうございます!
guest

0

ベストアンサー

java

1System.out.println(a.equals(b));

このequals()A.equals(Object obj)です。
Aequals(Object obj)の引数objBのインスタンスを渡しているわけです。

となると、

java

1public boolean equals(Object obj){ 2 if(obj instanceof A){ 3 A a=(A) obj; 4 return this.num==a.num; 5 } 6 return false; 7}

objBのインスタンスなのでfalseが返ります。

投稿2021/04/13 06:20

ozwk

総合スコア13553

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

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

kurodachikara

2021/04/13 06:42

回答ありがとうございます! 理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問