久しぶり(新入社員研修ぶり)にJavaを触りました。
その際、String型の同値を"=="を使用し比較したところ、文法はあっているはず...にも拘らず、期待結果通りになりませんでした。
その際に調べた結論について、自分用の備忘録としてまとめてみます。
今回、使用したif文は下記のように記載していました。
String st = "10";
String db_data = "10";
if (st == db_data) {
System.out.println("値は同じ")
} else {
System.out.println("値は別");
}
// 出力結果
// 値は別
本当ならば "値は同じ" であることを出力させたいのですが、上記で出力されたのは、"値は別" と判定されました。
原因
原因はString型が参照型のデータ型であり、参照型の比較には「equalsメソッド」を使用する必要がある。という点でした。
参照型とは?
参照型はJavaのデータ型の一つで、Stringや配列、Listなどが当てはまります。
値そのものを保持するのではなく、値が置いてある場所を保持します。
細かいところは調べればたくさん出てくるので、今回は省きます。
文字列をどう比較するか
文字列の値同士を比較する場合は、"==" で比較するのではなく、eqialsメソッドを用いて比較します。
String st = "10";
String db_data = "10";
if (st.equals(db_data)) {
System.out.println("値は同じ")
} else {
System.out.println("値は別");
}
// 出力結果
// 値は同じ
この場合は "==" とは違い、"値は同じ" で出力されます。
まとめ
今回Javaを久しぶりに触れたため、忘れていたことも多く、初歩的なところで躓いてしまいました。
文字列比較をする際は「eqialsメソッド」を使用しましょう(自戒)
【参考】
・【Java】初心者が文字列比較で失敗する等価比較。間違いに気づいていない可能性も!?
・Javaのプリミティブ型と参照型について
・==演算子とequalsメソッドの違い