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]Stringオブジェクトの代入 

かなり当たり前な話だが、Stringクラスの代入演算はコピーである。
String s1 = "test";
String s2 = null;

s2 = s1;
s2 += " String Substitution";

System.out.println("s1:" + s1);
System.out.println("s2:" + s2);

結果:
s1:test
s2:test String Substitution

となり、Stringオブジェクトの代入は、値のコピーである。

[Java]現在日付をyyyy/MM/ddの形式で出力する。 

日付をいろいろな書式で出力したい時の参考に。
Dateクラスをnewすると、現在日付がセットされる。
SimpleDateFormatクラスを使用して年月日の書式を整える。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(df.format(d));

<<実行結果>>
2005/01/07

[Java]try...catch...finally...throw...の実行順序 

try...catch...finally...throw...の実行順序
try 中で例外が発生すると、catch句へ移動する。

catch句中で例外をスローした場合、直ちにfinallyが実行される。その後、スロー先へ飛ぶ。
try{
System.out.println("①");
// 例外を発生させる
throw new Exception();
}catch(Exception e){
System.out.println("②");
throw e;
System.out.println("この行は実行されない。");
}finally{
System.out.println("③この行は実行される。");
}
System.out.println("④この行は実行されない。");

<<実行結果>>


③この行は実行される。

«  | HOME |  »

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