[Java基礎⑦]文字列の比較 比較演算子とequals メソッドの違い [paiza]スキルチェック見本問題 単純な条件分岐 Java編


初めに

今回、以下の問題に挑戦し、Javaでの文字列と文字列の比較について学びました。
普通に比較演算子を使用したところ不正解になってしまいました。
(以下は見本問題のため、問題、解答コードの公開は自由です。)

文字列Sが与えられます。Sがpaizaと一致する場合はYESを、
一致しない場合はNOを出力してください。

誤答 文字列の比較演算子に注意!

標準入力をlineで受け取り、==の比較演算子を使い、
"paiza"と一致するかをif文で条件分岐させました。
しかしこれだと不正解です。
(line == "paiza")が成立してくれません。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        if(line == "paiza"){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}

問題点 比較演算子ではオブジェクトを比較する

問題は(line == "paiza")の箇所です。
配列や文字列を比較する場合、比較演算子を使用すると、
同じオブジェクトを参照してればtrue、違えばfalseが返ってきます。

//同じオブジェクトを参照している場合には、
//比較演算子で比較するとtrueが返って来る
String line1 = "paiza";
String line2 = line1;
if(line1 == line2)  true

今回比較すべきなのは、「値」です。
入力された「値」がpaizaに等しいかどうかです。

使うべきは equalsメソッド

現状、(line == "paiza")としてる箇所は、
if (line.equals("paiza")とすることで、値の比較になります。

正解のコード

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        if(line.equals("paiza")){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}

参考にしたサイト