【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などで対処する。

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次