Java 相同字符串的比较结果为false

Java 相同字符串的比较结果为false,java,arrays,string,comparison,Java,Arrays,String,Comparison,我有两个相同的字符串,一个在数组中,一个在字符串变量中。当我比较这些相同的字符串时,每次都会得到false。我调试了又调试,但每次都得到相同的结果。这是有问题的代码 String temp = ""+(num1*num2); Boolean equal = temp == answers[i]; if(equal) { correct[i] = true; num_correct ++; }else{ correct[i] = false; } 同样,我已经调试了这个

我有两个相同的字符串,一个在数组中,一个在字符串变量中。当我比较这些相同的字符串时,每次都会得到false。我调试了又调试,但每次都得到相同的结果。这是有问题的代码

String temp = ""+(num1*num2);
Boolean equal = temp == answers[i];

if(equal) {
    correct[i] = true;
    num_correct ++;
}else{
    correct[i] = false;
}

同样,我已经调试了这个程序的每个小细节,我有101%的把握字符串是相同的。为什么Java在比较时返回false?

在Java中使用对象的
=
操作符时,您正在尝试比较对象引用。也就是说,此对象句柄是否指向与此其他对象句柄完全相同的对象。除非字符串被插入,否则这将不起作用

改用:

这有用吗

Boolean equal = (temp == answers[i]);

我不确定这是否是一个问题,但我总是将我的条件括在括号中。

您正在进行引用比较,而不是值比较。当您使用==运算符时,它会检查引用是否相等。如果要检查这些值是否相等,请使用该方法


==在java中,for strings正在进行比较,以查看它们是否是相同的对象,而不是相同的字符串值。您应该改为使用.equals来比较值。==有时会起作用,因为字符串可以通过引用插入并引用相同的对象,即使是通过相同的文本单独创建的(因此字符串b=“Hey”和字符串c=“Hey”最终在后台是相同的对象,因为“Hey”被插入到隐藏的字符串对象).

如其他人所示,您应该使用
equals

但我也会使用布尔对象的
booleanValue

这是正确完成的代码

String temp = ""+(num1*num2);
Boolean equal = temp.equals(answers[i]);

if(equal.booleanValue()) {
    correct[i] = true;
    num_correct ++;
}else{
    correct[i] = false;
}

为什么要使用布尔(java类)而不是本机布尔类型?还有,为什么要使用==运算符而不是equals()方法?我们需要一个前十大常见问题列表,==而不是equals总是出现。@Steve Kuo这是个好主意。如果还没有,你应该在meta上推荐它。你他妈的为什么要-1我!==在我遇到的每种编程语言中都可以处理字符串。我甚至没有想到它不起作用的可能性,许多其他程序员也没有想到。-1完全忽略了这个问题。没有必要使用
布尔值
而不是
布尔值
。只是在OP中指出了它。如果它是我的,我会使用
final boolean
。可能是因为使用boolean.booleanValue比boolean.booleanValue复杂得多,而且它会被解包到原始的boolean值。无论如何,我不是使用boolean的人。我只是使用了与OP相同的代码,但有所改进it@David:(联合国)拳击非常昂贵,这就是为什么他应该使用布尔运算。但是,调用booleanValue不会带来任何好处(除了较长的代码),因为Java 5+编译器会为您插入booleanValue。开销来自于使用引用类型而不是原语。
boolean equal = temp.equals(answers[i]);
String temp = ""+(num1*num2);
Boolean equal = temp.equals(answers[i]);

if(equal.booleanValue()) {
    correct[i] = true;
    num_correct ++;
}else{
    correct[i] = false;
}