这似乎很简单,但我已经被困在这里几个小时了。
我怀疑你必须在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;
}
}
我已多次尝试(明确输入相同的单词),结果始终为假。
我不知道为什么会这样。我错过了什么?
这是我第一次使用Java。我会感激任何帮助。感谢
答案 0 :(得分:3)
你应该改变
if (var1 == var2)
{
return true;
}
else
{
return false;
}
到
if (var1.equals(var2))
{
return true;
}
else
{
return false;
}
请参阅this answer了解两者之间的区别
答案 1 :(得分:0)
而不是if (same (var1, var2))
使用if (v1.equals(v2))
。无需创建新方法来比较两个String
。这就是equals()
的作用。
==
用于比较引用,而不是每个String
对象的内容。
答案 2 :(得分:0)
在Java中,==
是引用相等运算符。
适用于以下内容。
String var1 = "hello";
String var2 = "hello";
boolean cmp = var1 == var2;
只是因为它们是字符串文字并且它们被分配在字符串表中的相同位置,所以两个变量都指向相同的字符串。
如果从其他源获取数据,则会动态分配字符串,因此您应该使用var1.equals(var2)
(并且在比较两个对象时应始终使用该字符串)。
答案 3 :(得分:0)
为了更准确,使用Java中的字符串有时您可以使用==而不是.equals,如果您的字符串已被实习。请记住,==始终比较对象引用,而不是对象的内容。实习字符串意味着您将获得相同的对象引用,这就是==使用实习字符串的原因。
请在此处阅读Javadoc,以便更清楚地了解这一点:
答案 4 :(得分:0)
var1 == var2
有时会起作用,因为VM为内存优化分配了相同的内存,因此具有相同的引用。情况并非总是如此,所以最好使用
var1.equals(var2)
如果你想比较他们的价值而不关心参考。
答案 5 :(得分:0)
等于运算符(==)首先检查字符串的引用,然后检查字符串的值。
而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相等,输出也是错误的。因此,在这种场景中,如同有问题的程序
必须使用Equals方法。