こんにちは、新人のヤマちゃんです。
本日の学習をブログで振り返ります。
・if 文、switch 文
きょうは if 文、switch 文にまつわる話で String 型の仕様について書いていこうと思います。
まず、String どうしの変数の比較は equals() メソッドで行います。なぜなら、int や double といったデータ型とは異なり、String は ”参照型” だからです。
以下、equals() メソッドを使用したコード例です。
まずString 型の変数 str1 に「おはよう」を代入します。つづいてコンソールから「おはよう」を入力し、その値を str2 に代入します(ここでScanner~を使っていますが詳細は割愛)。
そして str1 と str2 をif 文内の条件式で比較しています。コンソールから「おはよう」と入力した場合、if 文内の処理が実行されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner scanner = new Scanner(System.in); String str1 = "おはよう"; System.out.print("おはようと言え:"); String str2 = scanner.nextLine(); if (str1.equals(str2)){ System.out.println("おはよう!"); }else{ System.out.println("さよなら..."); } } |
データ型である int は値を代入するさい、実数を受け取るので==演算子で比較できます。
以下、コード例
1 2 3 4 5 6 7 8 9 10 11 12 |
public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int num1 = 100; int num2 = 100; if (num1 == num2){ System.out.println("おはよう!"); // num1 == num2 は true なのでブロック内の処理が実行される } else { System.out.println("さよなら..."); } } |
それに対して、String で==演算子で使用して比較しようとするとエラーが出てしまいます。
なぜなら、参照型である String は変数に実数が入っているのではなく「実数が格納された場所の住所」を代入しているからです。
以下の例では if 文内の処理は実行されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner scanner = new Scanner(System.in); String str1 = "おはよう"; System.out.print("おはようと言え:"); String str2 = scanner.nextLine(); if (str1 == str2){ System.out.println("おはよう!"); }else{ System.out.println("さよなら..."); } } |
(なぜ str2 に直接、値を代入しないのかはこちらのサイトに例があります。)
参照型とデータ型のちがいはしっかりと把握しておくべきです。もっと学習を進めるとあたりまえに必要になってくる知識だと思います。
あと Java の String 型 どうしの比較でハマる初学者が多いのか、似た内容の記事が大量に見つかります。わたしもその中のひとりとして戒めを込めて本記事を書いた次第です。これで忘れないはず。
英単語の前後にスペースを入れると見やすいけど、タイピングが面倒ですね。なんか上手い方法がないものか。