【速習Java】”==”と”equals”の違い(否定の方法も解説)

【速習Java】”==”と”equals”の違い(否定の方法も解説)
中井
書いた人 中井

こんにちは!フリーライターの中井です。

Javaには文字列の比較を行うStringクラスに属するequalsメソッドがあります。

この記事では、equalsメソッドについて

・「==」と「equals」の違いについて
・equalsメソッドで否定の判定をする方法
・複数の否定の判定をする方法

という基本的な内容から、

・equalsメソッドの例外の注意点
・equalsメソッドの例外に対処する2つの方法

などの応用的な使い方に関しても解説していきます。

今回はそんなequalsメソッドについて、わかりやすく解説します!

「==」と「equals」の違いについて

int型などのプリミティブ型で2つの値が等しいか比較する場合は”==”演算子で比較しますが、String型などの参照型の場合はequalsメソッドで比較する必要があります。

String型などの参照型の場合に”==”演算子で比較すると参照先が同じかどうかを比較することになります。

参照先の値を比較する訳ではありません

サンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、String型変数のhogeとfugaを同じ文字列で初期化し、同じ文字列を追加しています。

しかし、実行結果をみると"=="で比較した場合は"false"を返し、equalsメソッドで比較した場合は"true"を返しています。

String型は宣言、初期化時には擬似プリミティブ型として扱われますが、文字列を追加したときに参照型として扱われるようになります。

したがって、値が同じであっても参照先が違うので"=="で比較した場合は"false"を返します。

equalsメソッドで比較した場合は値が同じですので、"true"を返しています。

String型の文字列をequalsメソッドで比較する方法についてはこちらで詳しく解説していますので、参考にしてください。

equalsメソッドで否定の判定をする方法

equalsメソッドは文字列を比較して等しい場合に“true”を返しますが、文字列が等しい場合に“false”を返す処理をしたいと思ったことはありませんか?

そんなときは、否定の論理演算子”!”を使うことで“true”と”false”の判定を逆にすることができます。

否定の論理演算子”!”の使い方を次のプログラムで確認してみましょう。

実行結果:

このプログラムのポイントは次の2点です。

・equealsメソッドを使ってstr1とstr2の文字列が違うのか調べる
・否定を判定するときには論理演算子”!”を使用

このプログラムは単純に文字列を調べ、違っていたらtrue、同じならfalseと出力しています。

当然同じなので、falseと返しています。

複数の否定の判定をする方法

論理演算子である!マークは、他の条件とも組み合わせて使うことができます。

次のプログラムでは名前とパスワードの両方が一致しているときに“false”を返す処理をするために、“&&”演算子と組み合わせて使っています。

ソースコードで確認してみましょう。

実行結果:

equalsメソッドの注意点

equalsメソッドの注意点は、主に3つあります。

equalsメソッドと例外発生(nullPointerException)

まず1つ目は、nullが入ったオブジェクトからメソッドを呼び出すとnullPointerExceptionの例外を投げます。

文章では分かりづらいので、実際にソースを見ていきましょう。

実行結果:

このソースコードは、hogeとHelloが等しい文字列か調べていますが、よく見てください。

肝心のhogeには、nullが入っています。

このnullは値の参照先がない状態です。

nullのオブジェクトからメソッドを呼び出そうとするとNullPointerExceptionの例外が発生します。

try-catch文などで例外処理をしていない場合には、一度例外が起きるとそれ以降のプログラムは実行されないようになります。

ですので、そうならないようにプログラムを組み直す必要があります。

例外発生をなくす①:値を先に持ってくる

例外を発生させない1つ目の方法として、hogeとHelloの位置を逆にするとnullPointerExceptionが出ないようになります。

実行結果:

比較する文字列を先に持ってくることで、nullPointerExceptionの例外が出ないようになりました。

その結果、“Hello”とnullを比較してfalseを返す処理ができました。

例外発生をなくす②:null判定を行う

例外を発生させない方法の2つ目として、ifで条件判定をするときにnull判定を追加することです。

実行結果:

nullチェックをすると、どこで間違えているのか一目瞭然ですし他の人にプログラムが渡ったときにも大変分かりやすいと喜ばれます。

equalsメソッドで比較をする方法総まとめ

equalsメソッドで文字列を比較するいろいろな方法を次の記事にまとめているので、ぜひ確認してください!

まとめ

今回は、equalsメソッドの否定の判定方法、equalsメソッドの否定判定を複数用いる方法とequalsメソッドの注意点をお伝えしました。

・否定判定を用いるには論理演算子!(条件)
・否定判定を用いて複数条件を組み込むことができる
・hoge.equals(“Hello”)においてhogeがnullの場合には例外が発生する
・例外は“Hello”.equals(hoge)のように値を先に持ってくることや、hoge != nullと判定することで防止できる

この4つのポイントをしっかりと理解して学習を進めてください。

Javaカリキュラム無料公開中!
この記事はJava入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Java学習に必要な情報を一つにまとめていますので効率よくJavaを学ぶことが出来ます。この機会に是非活用していただければと思います。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


最短でJavaを習得したい方へ

もし、あなたが、

「難しすぎて学習が全然進まない」
「学習量が膨大でゴールが見えない」
「エラーを解決するのに何日もかかってしまう」

など、プログラミング学習やキャリアに関してお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_bannar-java2

学習者インタビュー

23歳、早稲田中退生が3ヶ月でフリーランスエンジニアになるまで
32歳ベンチャー企業元役員が起業してプログラミングを学んだ話
元ディスクユニオン店員が33歳からプログラミングを学びエンジニアになるまで
ヨガスタジオのマネージャーだった私が3ヶ月でWeb制作をマスターするためにした”たった1つ”のこと
Uターン女子がRubyを学んで理想のライフスタイルを手に入れた話
新卒、文系出身エンジニアが語る、経験0からプログラミングができるようになった理由

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題!最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
Python学習カリキュラム無料公開中
 1記事最大10,000円!テック系ライターさん大大大募集!!!
LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

中井

中井

フリーライター。
主に美容系、ライフスタイル系含めこれまでに500本以上執筆。
趣味はオンラインゲームにフリーソフトの情報収集。

プログラミンとの出会い
-----------------------------------------------------------------------------------------
PCとプログラミングは大学からです。
それまでは、PCは触ると壊れると思い込んでました。

大学の授業で面白そうな理由でJavaを専攻。
全然授業についていけず、後ろの席の子に課題をやってもらってました。

そんなプログラミング音痴な状態で社会人を迎え、先輩からVBAがオススメと言われVBAを職場の人から教えてもらい習得。
その後、自分の業務に携わるものおは全てVBAを組みました。

会社を退職後、再度Javaを勉強する機会に恵まれ、大学でわからなかったことが一気に理解できるように。
念願のAndroidアプリでTwitterのクライアントアプリを作れるまでになりました。
以後、文章の修行の傍らJavaの最新情報を追う日々が続いています。