2

这似乎很简单,但我已经被困在这里几个小时了。

当您必须在 Java 中比较两个字符串时,我有疑问。

如果我只是做这样的事情:

String var1 = "hello";
String var2 = "hello";

然后在另一个函数中比较这两个词,结果显然是正确的。

但问题是当我必须比较来自输入的两个单词时。这是我的代码:

import java.util.Scanner;

public class Compare{

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

    System.out.println("Enter first word: ");
    String var1 = Scanner.nextLine();

    System.out.println("Enter second word: ");
    String var2 = Scanner.nextLine();

    if (same (var1, var2))
        System.out.println("Yes");
    else
        System.out.println("No");
}

public static boolean same (String var1, String var2){
    if (var1 == var2)
        return true;        
    else
        return false;
}


}

我已经尝试了几次(显然输入了同一个单词),结果总是 False。

我不知道为什么会这样。我错过了什么?

这是我第一次接触 Java。我将不胜感激任何帮助。谢谢

4

6 回答 6

4

你应该改变

if (var1 == var2)
{
    return true;        
}
else
{
    return false;
}

if (var1.equals(var2))
{
    return true;        
}
else
{
    return false;
}

请参阅此答案以了解两者之间的区别

于 2012-09-02T01:21:56.923 回答
2

在 Java 中,==是一个引用相等运算符。

它适用于以下内容。

String var1 = "hello";
String var2 = "hello";
boolean cmp = var1 == var2;

只是因为它们是字符串文字并且它们被分配在字符串表中的同一个位置,所以两个变量都指向同一个字符串。

如果您从另一个来源获取数据,则字符串是动态分配的,因此您应该使用var1.equals(var2)(并且在比较两个对象时应该始终使用那个)。

于 2012-09-02T01:24:39.603 回答
2

更准确地说,在 Java 中使用字符串时,如果您的字符串已被实习,有时您可以使用 == 而不是 .equals。请记住 == 总是比较对象引用,而不是对象的内容。实习字符串意味着您将获得相同的对象引用,这就是 == 与实习字符串一起工作的原因。

请阅读此处的 Javadoc 以更清楚地理解这一点:

String.intern()

于 2012-09-02T01:38:51.560 回答
1

相等运算符(==)首先检查字符串的引用,然后检查字符串的值。而 equals 方法首先检查值。因此,在这种情况下,应使用 equals 方法而不是相等运算符。 String s="hello"; String s1="hello"; String s3=new String("hello") 在上面的代码片段中,如果你使用If(s==s1){System.out.print("Equal");}它会打印相等。但是如果你检查If(s==s3){System.out.print("unqual");}它不会打印不相等。因此,您可以看到即使字符串 s 和 s3 相等,输出也是错误的。因此,在这种情况下,就像有问题的程序一样

必须使用等于方法。

于 2012-09-03T09:25:59.570 回答
1
var1 == var2

有时会起作用,因为 VM 为内存优化的两个变量分配了相同的内存,因此具有相同的引用。情况并非总是如此,因此最好使用

var1.equals(var2)

如果您想比较它们的值并且不关心参考。

于 2012-09-03T07:19:56.433 回答
1

而不是if (same (var1, var2))使用if (v1.equals(v2)). 无需创建新方法来比较两个Strings。就是equals()这样。

==用于比较引用,而不是每个String对象的内容。

于 2012-09-02T01:23:28.317 回答