日々学んだことを残しておこう。きっと未来の自分が探しにくる。 (ただ忘れっぽいだけです…)

Java 文字列比較


ユーザ登録ページ作成していて、トークンとセッションidのチェック部分でミスしていたのでメモします。

String型の二つの変数チェックで、「== 演算子」を使ってしまっいて、あれ??
なんでfalseなのってことに。


//入力値からトークン取得
String token = request.getParameter("token");
//セッションid取得
HttpSession session = request.getSession();
String sessionId = session.getId();
//比較(文字列的には同じものが格納されている)
if (token == sessionId) {
System.out.println("true");
} else {
System.out.println("false");
}


trueになって欲しかったけど、falseになっちゃう。


なんでって、それはね~。

Java「== 演算子」は、ふたつのオブジェクトか同じかどうかを調べたりする場合に使うので、今回の場合はNG。

正解は、equals(str) を使う。
ちなみに大文字・小文字を無視して比較する場合は equalsIgnoreCase(str)。


//入力値からトークン取得
String token = request.getParameter("token");
//セッションid取得
HttpSession session = request.getSession();
String sessionId = session.getId();
//比較(文字列的には同じものが格納されている)
if (token.equals(sessionId)) {
System.out.println("true");
} else {
System.out.println("false");
}


ちゃんとtrueになりました。



C#では「== 演算子」でもちゃんと文字列比較してくれていたので、その勢いでJavaでもやっちゃったケース。
以前、JavaとC#の違い(比較)なんて記事書いたのにお恥ずかしい…

C#の場合もString.Equalsメソッドを使った方が良かったのかも。


(参考サイト)
C#の文字列比較
http://dobon.net/vb/dotnet/string/stringequals.html
Javaの文字列比較
http://www.tohoho-web.com/java/string.htm


追記2011.7.6
変数A、Bある時、AとBが同じ文字列か比較したい時
【1】A.equals(B)
【2】B.equals(A)
のどっちでも良いんだと思っていたけど、Aだけnullが入る可能性がある場合、【1】の場合エラー、【2】の場合falseが返ってくる。【1】だとAがnullでない時っていう条件文を追加しないといけなくなる。
少しでもすっきりされるために【2】を使うようにしましょう。

(参考サイト)
Javaの格言:【小技】String#equals(String)の上手な使い方
関連記事

2011-06-22 : Java : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

広告

読みたいと思っている書籍

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく Amazon Web Services 定番業務システム12パターン 設計ガイド イラストで学ぶ 機械学習 最小二乗法による識別モデル学習を中心に (KS情報科学専門書) イラストで学ぶ ディープラーニング (KS情報科学専門書)

カウンタ

メールフォーム

名前:
メール:
件名:
本文:

GoogleTranslate

管理人のつぶやき

人気記事ランキング

カテゴリ

openclose

ブログ内検索

全記事表示リンク

全ての記事を表示する

ブログパーツ