for循环期间信息丢失

时间:2014-06-24 17:41:29

标签: java for-loop set

我对此方法有疑问:

private boolean reflectionEqualsSet(Object left, Object right) {

Set leftSet = (Set) left;
Set rightSet = (Set) right;

if (leftSet == null) {
    // POF tricks: if set to serialize is null, the deserialized set is empty
    return rightSet != null && rightSet.size() == 0;
}

// check size
if (leftSet.size() != leftSet.size()) {
    return false;
}

// check values
for (Object currLeft : leftSet) {
    boolean found = false;

    for (Object currRight : rightSet) {
        if (isEqual(currLeft, currRight)) {
            found = true;
            break;
        }
    }

    if (!found) {
        return false;
    }
}

return true;
}

问题是:

我有一个在leftSet中有三个随机填充值的对象(2个UUID和1个整数)。 我leftSet中的值完全在for循环中发生了变化。调试时我发现在第一次迭代currSet已经有完全不同的值,我无法弄清楚原因。 在currRight的内部循环中,这不会发生。

我已经调试好几个小时了,我发现问题出在那一行,是否有人知道为什么价值会发生变化? (不是订单,价值观)。 我知道关于这个问题的信息不多,但这就是我所能说的,我不知道如何更好地解释它,抱歉。

由于

1 个答案:

答案 0 :(得分:4)

首先,您的尺寸检查已关闭

// check size
// if (leftSet.size() != leftSet.size()) {
if (leftSet.size() != rightSet.size()) {
  return false;
}

接下来,我不相信您的isEqual方法 - 请Override Object.equals(Object)

// if (isEqual(currLeft, currRight)) {
if (currLeft.equals(currRight)) {
  return true; // <-- and just short-circuit with return true!
}

return false;循环后显然for,您可以消除found