我有两个相同的字符串,一个在数组中,另一个在String变量中。当我比较这些IDENTICAL字符串时,我每次都会得到错误。我已经调试和调试,但每次都得到相同的结果。这是有问题的代码
String temp = ""+(num1*num2);
Boolean equal = temp == answers[i];
if(equal) {
correct[i] = true;
num_correct ++;
}else{
correct[i] = false;
}
同样,我调试了这个程序的每个细节,我101%确定字符串是IDENTICAL。为什么Java在比较时返回false?
答案 0 :(得分:14)
当您在Java中使用==
运算符时,您正在尝试比较对象引用。也就是说,此对象句柄是否指向与其他对象句柄相同的EXACT对象。除非字符串被实习,否则这将不起作用。
Boolean equal = temp.equals(answers[i]);
答案 1 :(得分:4)
您正在进行参考比较,而不是值比较。当你使用==运算符检查引用是否相等时,它们不是。如果要检查值是否相等,请使用equals方法。
boolean equal = temp.equals(answers[i]);
答案 2 :(得分:1)
==在java中对字符串进行比较,看它们是否是同一个对象,而不是相同的字符串值。您应该使用.equals代替它来比较值。 ==有时可以工作,因为字符串可以被实现并通过引用引用相同的对象,即使是通过相同的文字单独创建(所以字符串b =“嘿”和字符串c =“嘿”最终成为背景中的同一个对象因为“嘿”被固定到一个隐藏的字符串对象。)
答案 3 :(得分:-1)
正如其他人所示,您应该使用equals
。
但我也会使用布尔对象的booleanValue
。
这是您正确完成的代码
String temp = ""+(num1*num2);
Boolean equal = temp.equals(answers[i]);
if(equal.booleanValue()) {
correct[i] = true;
num_correct ++;
}else{
correct[i] = false;
}
答案 4 :(得分:-5)
这有帮助吗?
Boolean equal = (temp == answers[i]);
我不确定这是一个问题,但我总是把我的条件括在括号中。