プログラミング Java

【Java】Stringのequalsで定数を左側にする理由

投稿日:

JavaのStringでequalsによる等価判定を行う場合に、
比較対象となる定数は左側にする理由はNullPointerExceptionを回避するためです。
以降、NullPointerExceptionが発生する仕組みと、
定数を左側にすることでどのように回避できるのかについて解説していきます。
 

Stringクラスのequalsメソッド

Stringクラスに定義されているequalsメソッドです。
この中身も含めて解説していきます。

 

定数を右に置いた場合

<実行結果>

Exception in thread "main" java.lang.NullPointerException
at string_test.EqualsTest.main(EqualsTest.java:13)

<解説>

「Stringクラスのequalsメソッド」を見て下さい。
7行目:int n = value.length;
ここが、NullpointerExceptionの発生箇所です。

比較元のStringオブジェクト(str)のフィールドであるvalueがNullなので、
ここでNullPointerExceptionになります。

 

定数を左に置いた場合

<実行結果>

null
str is not String

<解説>

比較対象の文字列(Null値)を左にすると、「Stringクラスのequalsメソッド」の
5行目:if (anObject instanceof String) { でFalse判定となります。
7行目は実行されませんので、20行目でreturn false; となり、正常に機能します。

※5行目がFalseになるのは、
 String型同士の比較であっても値がNullの場合はFalseになるためです。((A)参照)。

 

どうしても左側にNullが入る可能性を排除できない場合

比較する値が左右ともに変数で、左側にNullが入る可能性を排除できないような場合は、
try~catchなどの対処が必要です。

<実行結果>

左側の変数がNullのため、評価できません。
java.lang.NullPointerException
at string_test.EqualsTest.main(EqualsTest.java:11)

<解説>

Null同士だからTrueが返ってくるわけではありません。
左側の値がNullなので、NullPointerExceptionが発生するため、
try~catchで例外を補足します。

他にも、Nullだったら強制的に空値(“”)で初期化するという方法も使えると思います。
大事なことは、左側にNullが入り込む余地があるなら必ず何らかの対処をするということです。

 

まとめ

・比較する変数を左|定数を右に置くと、NullPointerExceptionが発生する原因になる。
・定数を左|比較する変数を右に置くと、False判定として機能する。
・左側にNullが入る可能性がある場合、try~catchなどで対処する。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

【Laravel】SQLの確認はenableQueryLogを使う

SQLのデバッグのために、SQLとバインドされた値を確認したいことがあります。 その時に使える方法として、よく提示されるのは以下の2つです。 1.enableQueryLogメソッドとgetQuery …

【Java】IllegalArgumentExceptionの原因と対策方法

IllegalArgumentExceptionの原因と対策方法はとても簡単です。 基本的なことを理解すればすぐに解消できます。 IllegalArgumentExceptionとは? 不正な引数また …

【Java】SetをStreamで処理する方法 7選!

概要 前回の【Java】ListをStreamで処理する方法 7選!に続き、Set編です。 基本的にListもSetもCollection型であるため、コーディングに大きな差はありません。 気を付ける …

結城浩氏のPrototypeパターン 練習課題6-1の回答例

結城浩氏著作「Java言語で学ぶデザインパターン入門」 Prototypeパターン 練習課題6-1の回答例です。 課題の概要 UnderLinePen、MessageBoxクラスのcreateClon …

【Java】ディレクトリまたはファイルのみを再帰的に削除する

概要 再帰的にファイルやディレクトリを削除したいことがあります。 そんなときにサラッと書けるコードです。 環境 Java8以降 実装 指定したディレクトリを含めて全て削除 指定したディレクトリを含めて …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。