nullチェック不要!Objects.equalsで比較をしよう【Java】

  • LINEで送る
Objects.equalsで比較をしよう

文字列やObjectを比較するのにStringクラスのequalsメソッドを用いて比較する場合がある.このメソッドはjava.lang.NullPointerExceptionの危険性がある.このメソッドを使用してObject同士を比較するとき,比較前のObjectがnullの場合にExceptionが発生する.このExceptionを防ぐためにObjects.equalsで比較することでnullチェックを同時に行い,nullの場合でも比較することができる.

Stringクラスのequals

Stringクラスのequalsメソッドを使用したときの,正常に比較できる場合とExceptionが発生する場合の挙動を確認する

正常に比較できる場合

■文字列同士の比較

String text1 = "aaaa";
String text2 = "bbbb";

System.out.print(text1.equals(text2));

実行結果

>false

■nullとの比較

String text1 = "aaaa";
String text2 = null;

System.out.print(text1.equals(text2));

実行結果

>false

Exceptionが発生する場合

String text1 = null;
String text2 = "bbbb";

System.out.print(text1.equals(text2));
>Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "text1" is null

比較前の文字列がnullの場合,Exceptionが発生する.

Stringクラスのequalsを使用する場合のException回避

String text1 = null;
String text2 = "ssss";

System.out.print(text1 != null && text1.equals(text2));

実行結果

>false

比較前の文字列でnullチェックを行う.nullの場合次の条件の検証には入らないためExceptionは発生しない.

Objects.equals

Stringクラスのequalsを使ってもいいが,nullが混入する可能性があるコードでこのメソッドは使用すべきでない.そもそもnullチェック忘れる恐れもある.そのため文字列やobjectの比較にはObjectsクラスのequalsメソッドを使おう.

※Objects.equalsはjava7から使用できる

String text1 = null;
String text2 = "ssss";

System.out.println(Objects.equals(text1, text2));

実行結果

>false

比較前の文字列がnullでも比較後の文字列がnullでもExceptionを発生させずに比較が可能.より安全に比較することができる.

最新の投稿

SNSでもご購読できます。

コメントを残す