Java:没有正确比较

时间:2013-01-10 02:42:38

标签: java compare

我有小问题,我被困在这里。不知道错误在哪里。 我有这样的事情:

for (int j = 0; j < lengthF; j++){
    if(f[j].getSNumber()==number){ 
       //DO SOMETHING
    }else{
       //DO SOMETHING2
    }
}

所以如果我的数字等于对象f中的数字,我需要做点什么。 仅当我将数字设置为f[lengthF].getSNumber()(最后一个对象编号)时,这才是好的。 我检查了并且我正确加载了所有对象,我可以打印所有对象,但是当我比较时我无法让它工作(1 == 1,2 == 2 ......)..

我会尝试更好地解释它: 等

last number in object (last object) = 3
entered number = 1
1 != 1 <- getting this
entered number = 3
3 == 3 <- gettig good result....

3 个答案:

答案 0 :(得分:2)

这可能是重复的,但您希望使用.equals函数而不是====比较对象引用,而.equals如果被正确覆盖,则应检查对象内容。

正如其他人所提到的,如果你的类型是非整数(double / float),那么==是比较它们的坏方法。您应该使用abs(a-b) < 0.001或类似的东西来比较不等式和浮点数。

答案 1 :(得分:0)

您的问题很难理解,但我猜您在找到号码时会尝试做某些事情,而在您找不到号码时会做其他事情。

在这种情况下,你的逻辑不正确。

成功找到正确的号码后,您应该退出for循环。

boolean found = false;
for (int j = 0; j < lengthF; j++){
    if(f[j].getSNumber()==number){ 
        //DO SOMETHING
        found = true;
        break;
    }
}
if (!success) {
    // DO SOMETHING IF NOT FOUND
}

答案 2 :(得分:0)

如果从getSNumber()返回的类型是double,则可能是由于该类型的不精确性:值可能存在微小差异,使得两个值“不相等”,即使它们可能似乎是一样的。

如果从方法返回的类型是包装器,如IntegerDouble,则使用.equals()应该可以解决问题。使用==比较它们是否是相同的实例,它们不是。