[==]と[equals]の挙動の違いを確認したい。する質問をすることでしか得られない、回答やアドバイスがある。15分調べてもわからないことは、質問しよう!質問するただいまの回答率89.89%トップJavaに関する質問JavaJavaScriptを有効にしてください[==]と[equals]の挙動の違いを確認したい。13前提・実現したいこと[==]と[equals]の挙動の違いを確認したい。発生している問題・エラーメッセージ意図した動作にならない。「==」はクラスに代入された値が同じであればtrueを表示。「epuals」はメモリ上の保存位置まで同じであればtrueを表示。書いてあるように認識しました。同じ内容の上がfalseになるのはなぜでしょうか。初歩的な内容で恐れ入りますが、ご教示頂けますでしょうか。attachmentクリップ1気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順link+4「==」はクラスに代入された値が同じであればtrueを表示。「epuals」はメモリ上の保存位置まで同じであればtrueを表示。これはJavaでは逆です。==は同一オブジェクトでだけtrueで、equalsは中身が等しければtrueです。自分でクラスを作った場合、equalsで正しく判定してほしければ自分で実装する必要があります。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。以下のような理解であってますでしょうか。【解釈】まず、オブジェクトはインスタンスの属性が代入された状態だと再認識しました。参照APIのequals説明を見ると、比較対象が同じオブジェクトを参照する場合にtrueを表示と記載されていました。代入後に「違うオブジェクト」となり、falseになると解釈しています。h2){=========こちらについてですが、「==」は内容さえ同じであればtrueのはずがfalseになるのが気になります。資料を模索して、以下のような解釈に至ったのですが、あってますでしょうか。・「==」は変数に代入されている値にのみ有効。newすると使えない。オブジェクトを比較したいなら、「equals」を使うしかない。内容が同じというだけだとfalseになる。http://javatechnology.net/java/if_string_equals/※ちなみに上記の資料を参照して解釈しました。以下のような理解であってますでしょうか。オブジェクトはインスタンスの属性が代入された状態だと再認識しました。trueを表示と記載されていました。代入後に「違うオブジェクト」となり、falseになると解釈しています。こちらについてですが、「==」は内容さえ同じであればtrueのはずがfalseになるのが気になります。資料を模索して、以下のような解釈に至ったのですが、あってますでしょうか。・「==」は変数に代入されている値にのみ有効。newすると使えない。オブジェクトを比較したいなら、「equals」を使うしかない。内容が同じというだけだとfalseになる。※ちなみに上記の資料を参照して解釈しました。09:26Stringの場合は少し特殊で、「別な場所で作った同じ内容の文字列」が「同じオブジェクトになってしまう」ことがあります。いうことで、Stringに==を使うと、同じ内容の文字列について、trueを返すこともfalseを返すこともあります。Stringで文字列を生成することも可能です(リテラルで書けばいいので、ふつうは行いませんが)し、もちろんそれを==のオペランドにすることもできます。Stringの場合は少し特殊で、「別な場所で作った同じ内容の文字列」が「同じオブジェクトになってしまう」ことがあります。いうことで、Stringに==を使うと、同じ内容の文字列について、trueを返すこともfalseを返すこともあります。Stringで文字列を生成することも可能です(リテラルで書けばいいので、ふつうは行いませんが)し、もちろんそれを==のオペランドにすることもできます。15:30参考書を進めていくとこれも少し載っているようでした。String型の比較には==ではなく、equalsを利用しないといけないのですね。単元の区切り程度までは参考書を進めた上で質問するようにします。ご回答ありがとうございました。参考書を進めていくとこれも少し載っているようでした。String型の比較には==ではなく、equalsを利用しないといけないのですね。単元の区切り程度までは参考書を進めた上で質問するようにします。ご回答ありがとうございました。キャンセル完了するlinkcheckベストアンサー+3まだ回答を理解していないようですね。基本的な話として、Javaにおいてはint,longなどのプリミティブ型以外はすべて参照型です。参照型の変数にはその実体のオブジェクトが置かれている場所を示す値(参照値)が代入され、その値を使って実体にアクセスします。以下はこれを理解した上で読んで下さい。==は、両辺の変数が同じオブジェクトを指し示しているかどうかを判定する演算子です。内容がどうとかは全く判定しません。同じオブジェクトを指していれば必然的に中身も同じですが。newすると使えないわけではありません。そのnewしたオブジェクトと同じものを指す変数がほとんどの状況において存在しえないので、だいたいfalseになります。equalsメソッドは、自分と引数として渡されたオブジェクトが「同じ」であるかどうかを判定するためのメソッドです。何をもって「同じ」とするかはクラスの設計者が決める必要があります。何も設計しなければ==での比較と全く同じ効果になります。設計に応じて、equalsメソッドをオーバーライドすることで、希望通りの比較ができるようになるのです。例として出されたコードでは、2つのHeroオブジェクトを作り、名前をともに"ミナト"に設定し、HPを100に設定しました。これらのHeroは別個のオブジェクトです。別々のHeroに、同じ名前、同じHPを設定しただけで、別のものなのです。==での比較もfalseになるし、「同じ」の定義を==と一緒にしているequalsメソッドでもfalseになるのです。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。非常に丁寧な回答有難う御座います。別々のオブジェクトなので違うもの(false)だと認識します、という考え方だと認識しました。newすると使えないわけではありません。比較対象の変数の中に同じ案内板が入っている必要がある。別の実体が同じメモリ格納先に入っているはずもなく、大概failsになると理解しました。※ややこしい書き方になりすみません。equalsメソッドは、自分と引数として渡されたオブジェクトが>「同じ」であるかどうかを判定するためのメソッドです。何をもって「同じ」とするかはクラスの設計者が決める必要があります。参考書のページを進めたらHeroクラスでObjectクラスのequalsメソッドをオーバーライドさせる話が載っていました。同じ実体のみをtrueと捉える[==]とは逆になるように見受けられます。教えてもらっている中、些細な記載違いでしたら申し訳ありません。h1.equals(h2)である。====================================非常に丁寧な回答有難う御座います。いう考え方だと認識しました。newすると使えないわけではありません。比較対象の変数の中に同じ案内板が入っている必要がある。別の実体が同じメモリ格納先に入っているはずもなく、大概failsになると理解しました。※ややこしい書き方になりすみません。>「同じ」であるかどうかを判定するためのメソッドです。何をもって「同じ」とするかはクラスの設計者が決める必要があります。equalsメソッドをオーバーライドさせる話が載っていました。同じ実体のみをtrueと捉える[==]とは逆になるように見受けられます。教えてもらっている中、些細な記載違いでしたら申し訳ありません。h1.equals(h2)である。21:242点目のnewについてnewした際には「新たなオブジェクト」(この場合は本)が生成され、その新たなオブジェクトを指す案内板が返ってきます。これと別の変数とで"=="で比較してtrueになるためには両辺が同じ場所を指す案内板である必要があるわけですが、この場で新たに作ったオブジェクトを指す案内板がそれ以前に存在するはずがありません。変な書き方をしない限り、newしたオブジェクトを"=="の比較の俎上に載せてtrueになることはありえません。ラストのequalsについてこれはあくまでそういう比較のルール付け(すなわちequalsのオーバーライド)をしたあとでの話です。今のあなたのコードでは比較のルールを付けていない("=="での比較と同じ)ので、falseになります。newした際には「新たなオブジェクト」(この場合は本)が生成され、その新たなオブジェクトを指す案内板が返ってきます。これと別の変数とで"=="で比較してtrueになるためには両辺が同じ場所を指す案内板である必要があるわけですが、この場で新たに作ったオブジェクトを指す案内板がそれ以前に存在するはずがありません。変な書き方をしない限り、newしたオブジェクトを"=="の比較の俎上に載せてtrueになることはありえません。これはあくまでそういう比較のルール付け(すなわちequalsのオーバーライド)をしたあとでの話です。今のあなたのコードでは比較のルールを付けていない("=="での比較と同じ)ので、falseになります。それ以前に存在するはずがありません。確かにその通りですね。非常に分かりやすいです。(すなわちequalsのオーバーライド)をしたあとでの話です。失礼な質問をしてしまいすみません。参考書の抜粋は既にepualsがオーバーライドされていたんですね。APIにも「(※equalsは)比較対象が同じオブジェクトを参照する場合にtrueを表示」という感じの説明があったので、オーバーライド以前の挙動はどちらも「同一のオブジェクトを比較した場合にtrueと返す」と理解しました。この度は誠に有難うございました。それ以前に存在するはずがありません。確かにその通りですね。非常に分かりやすいです。(すなわちequalsのオーバーライド)をしたあとでの話です。失礼な質問をしてしまいすみません。参考書の抜粋は既にepualsがオーバーライドされていたんですね。「同一のオブジェクトを比較した場合にtrueと返す」と理解しました。この度は誠に有難うございました。キャンセル完了するlink+2Heroクラスのequals()をoverrideしてあげていないからです。Object#equals()の仕様はここに記載があります。Javaにある規約では、equalsをオーバーライドする時、次の内容を守るようにしろとの記載があります。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。判断基準はオーバーライドにより更新できる旨理解しました。詳細については、資料などから確認させていただこうと思います。判断基準はオーバーライドにより更新できる旨理解しました。詳細については、資料などから確認させていただこうと思います。java】「this」の意味が分かりません。解決済コードHero.javaの実際の使い方がわからない解決済equals()をオーバーライドしているのにremove()できない。エクリプスでのソースコードの実行をした際にエラーが出てきてしまいます。ofの使い方がわかりません。思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る閉じるトップJavaに関する質問[==]と[equals]の挙動の違いを確認したい。頂いたご意見への回答は行っておりません。