为什么不是"Ellie"=="Ellie",其中一个是从用户那里读的?

Ale*_*oss 2 java string string-comparison

以下问题来自我几周前的测验并且不正确,但没有提供答案:

请考虑以下代码,其中不包含编译错误:

String secret = "Ellie";
Scanner kb = new Scanner(System.in);
System.out.println("Guess which name I'm thinking of:");
String guess = kb.next();

if (guess == secret)
{
    System.out.println("Wow! You're smart!");
}
else
{
    System.out.println("Wrong!");
    System.out.println("You guessed: " + guess);
    System.out.println("The correct answer was: " + secret);
}
Run Code Online (Sandbox Code Playgroud)

假设用户在提示符处输入"Ellie".会产生什么输出,为什么输出而不是其他输出?

这是我错误的答案:

输出将是else语句"错误!" 因为字母'E'的大写.对此的解决方案是将String secret更改为"ellie"以及用户的猜测,或者可以将ignoreCase关键字写入String secret.

该程序实际输出"错误",我测试了它.

除了简单地知道答案之外,有人可以向我解释这个问题,以便我能更好地理解这个概念吗?

Sha*_* D. 8

==进行参考比较,因此即使两个字符串引用相等,也总是会说"错误!".为了使其正确匹配,必须使用它secret.equals( guess ).

  • 这实际上并不完全正确.你不会总是"错!".JVM可能决定重用"Ellie"字符串实例,在这种情况下,您将获得正确的.行为简直是未定义的. (2认同)