1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

久しぶり(新入社員研修ぶり)に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メソッドの違い

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?