RECOMMEND

ハッカーと画家
ハッカーと画家
プログラマ必読。→感想


C言語ポインタ完全制覇
C言語ポインタ完全制覇
C言語 対ポインタ最強兵器。
感想

COUNTER

MONTHLY

CATEGORIES

RECENT ENTRIES

RECENT COMMENTS

RECENT TRACKBACKS

twitter

Twitterボタン

APPENDIX

sugarball

こまごまと、プログラミング関係のtipsを。

[スポンサー広告]スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java]文字列比較の注意点 

結論から言えば、Javaの文字列比較はequalsメソッドを使いましょう。


Javaでは基本的に、文字列の比較はポインタの比較であるため、if文で(文字列1 == 文字列2)のように比較してはいけない。
String strA = "STRING";
String strB = "STR";
strB += "ING";

// 比較の結果はfalseとなる
if (strA == strB) {
System.out.println("この分岐は通らない");
}else{
System.out.println(strB);
}

これを実行すると、
STRING
となり、Stringオブジェクトの比較は、文字の内容の比較ではないことがわかる。

しかし、JavaのVMには奇妙な仕様がある。
String strA = "STRING";
String strB = "STRING";

if (strA == strB){
System.out.println("等しい!");
}

これを実行すると、
等しい!
となってしまう。これは何故かというと、Javaでは「同じ内容の文字列リテラル(「""」で閉じられた文字列)のインスタンスをひとつしか生成しない」という仕様のため、上記のstrAとstrBの比較(ポインタの比較)が一致している、とみなされる。


常に一定の結果を文字列リテラルでも、appendメソッドで接続した文字列でも、「+」演算子で接続した文字列でも、同じ比較結果を得ようとするなら、equalsメソッドを使うこと。
String strA = "STRING";
String strB = "STR";
strB += "ING";

// equalsメソッドの結果はtrueとなる
if (strA.equals(strB)) {
System.out.println("一致!");
}else{
System.out.println("一致しない!");
}

結果:
一致!



結論:文字列の比較はequalsメソッドを使うこと。

※Java1.4.x系で確認しました。

コメント

java初心者です。
ここに来て問題を解決できました。ありがとうございます☆

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://stackoftips.blog79.fc2.com/tb.php/9-2bbab7c6

«  | HOME |  »

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。