2009年06月26日

【1日1Java】Javaの文字列比較

// JRE 1.6.0_07
// Javaの文字列比較
// java.lang.String
// tag 文字列,比較

// 文字列を比較する
String hoge1 = new String("HOGE");
String hoge2 = new String("HOGE");

// == ではfalseになる場合がある
boolean bool = ( hoge1 == hoge2 ); //=> false

// 特に理由がなければ、equalsを使用する
hoge1.equals( hoge2 ); //=> true

// == で trueになる場合がある理由は、== がObjectを比較し、
// equalsが文字列を比較しているから。
// Objectの比較でtrueになるとは、同じものを参照しているということ

// == でfalseにならない例
String fuga1 = "FUGA";
String fuga2 = "FUGA";
String fuga3 = "FUG";
fuga3 += "A";

// 初期化時に値を入れた場合、Javaは容量の節約の為、
// ヒープ領域に入れられた1つの"FUGA"という文字列を、共有して参照する
bool = ( fuga1 == fuga2 ); //=> true

// fuga3のように演算を噛ませると、別の領域にFUGAを確保するので、
// ==比較はfalseになる
bool = ( fuga2 == fuga3 ); //=> false
fuga2.equals( fuga3 ); //=> true