在if语句中使用字符串和逻辑运算符

时间:2013-08-05 08:24:45

标签: java string

我是学习Java的新手。我大约一个星期前就开始了,每天花大约10个小时学习,我不确定我是否会落后于“应该”的地方(我正在处理的另一个问题) 我知道我的代码可能不是最有效的,但我必须从某个地方开始,而且我已经从上周读过的信息中输入了大部分内存。现在,我只是想制作游戏或应用来帮助巩固编程概念。把我学到的东西用来使这些信息变得相关。

我的问题是,为什么我的“if”语句直接转到“else”?

public class ClassSelect {

public static String className;

public static void pickPlayer() {

    Scanner scan = new Scanner(System.in);
    System.out.println("Pick your class." + "\n" + "[F]ighter" + "\n"
            + "[W]izard");
    String scanClass = scan.nextLine();

    if ((scanClass == "f") || (scanClass == "F")) {
        System.out.println("You picked the Fighter");
        String classNameF = "Fighter";
        className = classNameF;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    else if ((scanClass == "w") || (scanClass == "W")) {
        System.out.println("You picked the Wizard");
        String classNameW = "Wizard";
        className = classNameW;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("You didn't choose either.");
    }
}

4 个答案:

答案 0 :(得分:3)

对于字符串比较,您必须使用equals类的Object方法。 您的if语句将变得像 - if(scanClass.equals("f"))...

请记住,==比较参考而不是实际对象。

答案 1 :(得分:0)

始终使用equals比较字符串。

  • ==比较参考文献。

  • 另一方面,
  • equals()比较值。

    if ((scanClass.equals("f") || (scanClass.equals("F"))) 
    

答案 2 :(得分:0)

你应该使用 if语句中的scanClass.equalsIgnoreCase("f")因为==运算符将引用与值进行比较。

答案 3 :(得分:0)

运算符==,测试两个对象引用变量是否引用对象的完全相同的实例。

方法.equals()测试两个对象是否相互比较 - 但它们不必是同一对象的完全相同的实例。所以

 if ((scanClass == "f") || (scanClass == "F")) 

计算结果为false,控制权转到else块。