4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaの文字列比較(一致)

Last updated at Posted at 2016-06-14

なんか久しぶりにやらかしたので忘れないために。
初投稿がこんな記事でいいのだろうか。

#Javaの文字列比較について
Javaで二つの文字が一致するかどうか比較する場合は==演算子じゃなくてequalsメソッドを使うってのは、少しJava勉強すれば分かる事だし、調べればすぐ分かる。
(これから言う事だってさらに少し調べるだけで意外と出てきたりしますが…)

でも、大概どこいっても固定文字列と比較する場合はやっておいた方がいい(と私が思う)事が書かれてない事が多い。
自分でもこれどこで見たか忘れたくらいだけれど。

固定の文字は右か左か。

なんの事かと思うかもしれないが、固定の文字列と何が来るか分からないStringの変数を比較する場合、どちらを引数にするかで防げる事がある。

例えば、あるStringが送られてきてそれを特定の文字と比較する様な処理があった場合、下の例は少し問題がある。
例1)

public boolean isEqualsQiita(String str){
    return str.equals("Qiita");
}

まぁ、単純すぎて見れば分かると思うが、引数で渡された文字列が"Qiita"かどうか確認する処理だ。
そして次が私がやった方がいいと思うやり方。
例2)

public boolean isEqualsQiita(String str){
    return "Qiita".equals(str);
}

この二者はどちらが比較対象になるかの違いだけに見えて、大きな違いがある。

最初に挙げた例1では、引数のstrがnullだった場合にNullPointerExceptionが発生するのに対し、例2ではたとえnullがきたとしてもfalseが返るだけなのだ。

なるべく例外を発生させないプログラムを書こうとしたら、圧倒的に例2の方が優れているのは分かって頂けるのではないかと思う。

とか偉そうに述べながらも、自分もまだ染み付いてないせいか、これでエラー発生させるという事態が発生したので自戒の念も込めてorz

コメントを色々頂きまして追記

私自身最近は大分勉強が疎かでこんな記事でいいのかと思ってましたが、やはりもっと勉強しないとだめですね。
実際良く考えて、例2の状態は例えるなら、try,catchでエラーをキャッチしたものの、printStackTraceだけ出してエラー握りつぶしてる状態に近いかもしれません。
ちゃんと仕様を把握して、事前にnullチェックするなり、きちんとした対処をしましょう!

4
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?