Javaのequalsメソッドの使い方をマスターしよう!==演算子との違いとは?
  • facebookページ
  • twitterページ
  • 2019.10.02

    Javaのequalsメソッドの使い方をマスターしよう!==演算子との違いとは?

    Javaでは「==」演算子が利用出来ることもあり、初心者プログラマーの方や他のプログラミング言語をメインに利用している方には「equals」メソッドとの区別がいまいち理解出来ていない方もいらっしゃるかと思います。

    しかし、「==」演算子と「equals」メソッドの違いを理解せず実装を進めていると思わぬバグを作り出してしまう原因となり得ます。

    そこで本記事では、「equals」メソッドの基本的な使い方と「==」演算子との違いについて、サンプルコードで確認しながらご紹介していきたいと思います。

    Javaのequalsメソッドとは

    JavaのStringクラスより提供されている「equals」メソッドは文字列を比較するために利用されます。

    比較対象の文字列が同じ場合は「True」が返却され、異なる場合は「False」が返却されます。

    ポテパンダの一言メモ

    これだけの説明だと簡単なのですが、Javaで「equals」メソッドを利用する場合、もう少し深いところまで理解しておく必要があります。

    「同一」と「同値」のはっきりとした区別がJavaのequalsメソッドでは行われる

    equalsメソッドで良く見かける説明として2つの文字列が「同じ」であるという内容が挙げられます。

    この表現がJavaのequalsメソッドを利用する上で、初心者が混乱してしまう原因の1つとなっています。

    Javaでは一見「同じ」文字列でも「同一」の文字列と「同値」の文字列で比較結果が異なります。

    Javaにおける「同一」とはインスタンスが同じことを意味しており、つまり「参照先が同じ」ことを指します。

    「同値」についてはインスタンスが異なる場合でも文字列が同じ場合、「同値」の値と判断されます。

    equalsメソッドでもObject型とString型の2通りが存在する

    JavaでequalsメソッドというとまずStringクラスより提供されているメソッドをイメージする方が多いかと思います。

    Stringクラスのequalsメソッドは頻繁に起こるエラーの原因として、「null」との比較を行なった際にnullPointerExceptionが発生する問題があります。

    そこでJavaではjava.util.Objectsクラスにもequalsメソッドを追加し、Objectsクラスのequalsメソッドを利用することでnullPointerExceptionを回避出来る手段が追加されました。

    Java equalsメソッドの基本的な使い方

    まず基本となるStringクラスでのequalsメソッドの記述方法についてご紹介していきます。

    Stringクラスequalメソッドの基本構文

    上記のコードが最も基本的なequalsメソッドの利用方法となります。

    string1に該当する文字列とstring2に該当する文字列を比較した結果を返却します。

    実際のコードで確認してみよう。

    ではequlsメソッドを利用した実際のコードで実行結果を確認していきたいと思います。

    まず通常の文字列比較を行なってみます。

    最も基本となるパターンで結果は「true」が返却されます。

    ここでstr1を「null」として指定して実行してみましょう。

    Stringクラスのequalsメソッドでは比較元の文字列に「null」を指定した場合NullPointerExceptionが発生してしまいます。

    NullPointerExceptionを避けてequalsメソッドを利用したい場合には上記でご紹介したように、Objectsメソッドのequalsメソッドで下記のように記述することが可能です。

    Objectsクラスのequalsメソッドを使用した場合の結果は「false」が返却され、NullPointerExceptionを回避出来ていることが確認出来ます。

    Javaにおけるequalsメソッドと「==」演算子の違いを理解しよう

    様々なプログラミング言語で比較の際に利用される演算子といえば「==」ですが、Javaにおいてequalsメソッドとどういった点が異なるのか確認していきたいと思います。

    「==」演算子で比較されるのは「同一」の値

    同じ文字列をStringクラスのオブジェクトとしてインスタンス化し、「==」演算子で比較した結果を検証してみます。

    一見すると同じ「123」という値が設定されているため、答えは「true」となりそうですが結果は下記の通りとなります。

    この結果は「==」演算子が比較しているのが「同一」の値であり「同値」の値ではない点にあります。

    equalsメソッドでは「同値」の値が比較されるため結果が異なる

    上記のサンプルコードを比較部分のみequalsメソッドに変更した結果が下記となります。

    equalsメソッドではインスタンスの同一ではなく、設定された値の「123」が比較されるため結果は「true」が返却されています。

    さいごに

    本記事では、Javaのequalsメソッドについて基本的な概念と使い方をご紹介してきました。

    Java以外のプログラミング言語を中心に活動されているプログラマーの方が特に起こしやすいミスが、今回ご紹介した「equlsメソッド」と「==」演算子の使い分けとなっています。

    ぜひ本記事の情報を記憶に留めて頂き、Javaでコードを実装する際に思わぬバグを生まないよう注意しておきましょう。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件