プログラミング 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


関連記事

【SpringBoot入門】#7~ 検索画面の作成

概要 書籍情報を検索するフォーム(検索フォーム)と検索結果を表示する画面(検索結果一覧)を作成します。 検索フォームと検索結果一覧はHTMLファイルを分けて作成しています。 分けることは必須ではなく、 …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

【Bootstrap】ログイン画面をデザインしよう!

概要 【SpringSecurity】#3~ 独自のログイン画面でシンプルな独自のログイン画面を実装しました。 これに、Bootstrapでデザインを施していきます。 Bootstrapのサンプルを基 …

【Javaサンプル】自動販売機を作成(Level1)

Javaの勉強用サンプルです。 テーマは自動販売機。 プログラミング初心者向けに書いています。   自動販売機を題材として選んだ理由 自社研修で行っている 自社研修で自動販売機を作成したので …

【SpringSecurity】#2~ ユーザ毎の権限設定(認可)

概要 権限によって、アクセス可能なページを制限する機能の実装します。 管理者画面を作成し、権限によって画面の出し分けを行います。 前提 #1~ ログイン画面の実装が完了していること。 管理者画面の追加 …

SpringFramworkの良書

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

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