2

可能重复:
如何比较 Java 中的字符串?

我究竟做错了什么?编译并运行程序后,我输入我的输入,无论它是什么,程序总是将其视为错误输入并说我错了,这里:

import java.util.Scanner;

public class mena3 {

    public static void main(String[] args) {
        Scanner user_input = new Scanner(System.in);

        String Capitol;
        System.out.print("Enter the capitol of Morocco: ");
        Capitol = user_input.next();

        if(Capitol == "Rabat") {
            System.out.println("Good Job!");
        }
        else {
            System.out.println("That is incorrect");
        }
    }
}

在我输入拉巴特之后,它说那是不正确的。如果我输入 l,它会说那是不正确的。为什么我赢不了?

4

3 回答 3

4

不要使用==. 请改用equals(...)orequalsIgnoreCase(...)方法。了解 == 检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这在这里很重要。所以而不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

或者,

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

投票结束这个问题,因为它只在这个网站上被问过和回答了无数次。

于 2012-09-24T00:38:49.230 回答
3

java中最常见的错误之一。字符串需要 a.equals()而不是==.

错误的:

if (str == "foo") {

}

正确的:

if ("foo".equals(str)) { // done in this order to avoid NPE

}
于 2012-09-24T00:39:18.077 回答
0

你的代码是完美的,只是你的比较方法是错误的。所有其他语言都视为==比较运算符。但在 Java 的情况下,它有点棘手。在 Java 中,这里==被视为对象的比较运算符,而不是字符串变量。

因此,要比较两个字符串,您需要调用`.equals()一个来自 String 类的方法。

因此您需要相应地更改您的代码,

import java.util.Scanner;

public class mena3 
{
    public static void main(String[] args) 
    {
        Scanner user_input = new Scanner(System.in);

        String Capitol;
        System.out.print("Enter the capitol of Morocco: ");
        Capitol = user_input.next();

//        if(Capitol == "Rabat")  // your previous code
        if(Capitol .equals ( "Rabat") ) // new updated comparison code
        {
            System.out.println("Good Job!");
        }
        else 
        {
            System.out.println("That is incorrect");
        }
    }
}
于 2012-09-24T00:51:11.497 回答