两个相等的数组列表,但java看不到相同

时间:2014-04-24 08:07:45

标签: java eclipse arraylist junit

这里我声明了两个数组列表

ArrayList<Location> possibleMoves = new ArrayList<Location>();
possibleMoves.add(new Location(0, 1));
possibleMoves.add(new Location(1, 0));

ArrayList<Location> possibleMoves1 = new ArrayList<Location>();
possibleMoves1.add(new Location(0, 1));
possibleMoves1.add(new Location(1, 0));
很明显,这两个数组列表是相同的,但是当我运行此检查时,它似乎总是失败。

if(possibleMoves == possibleMoves1){
  System.out.println("lol");
}

我也试过这个,但它失败了

assertTrue("Player 1 1st piece could play to the left and down!",
arrayListsEqual(possibleMoves, possibleMoves1));

这是arrayListsEqual

的方法
private boolean arrayListsEqual(ArrayList<Location> a, ArrayList<Location> b) {
    if (a.size() != b.size()) {
        return false;
    }
    int size = a.size();
    boolean thisOneFound = false;
    for (int i = 0; i < size; i++) {
        thisOneFound = false;
        for (int j = 0; j < size; j++) {
            if (a.get(i).equals(b.get(j))) {
                thisOneFound = true;
                break;
            }
        }
        if (!thisOneFound) {
            return false;
        }
    }
    return true;
}

3 个答案:

答案 0 :(得分:4)

2个问题:

  1. &#34;位置&#34;对象是不同的实例。所以他们是完全不相关的对象。
  2. 列表本身就是不同的实例。
  3. 首先:你需要检查&#34; equals&#34;列表方法:

     list1.equals(list2).
    

    另外,您需要确保将SAME对象保存在这些列表中(通过使用相同的实例)或实现&#34; equals&#34;和&#34; hashmap&#34; &#34;位置&#34;中的方法类。

    一旦完成,它应该有效。

    祝你好运:)

答案 1 :(得分:0)

请阅读==equals之间的区别。 ==检查两个引用是否引用相同的实例,而equals检查是否相等。看看这个question的答案。

答案 2 :(得分:0)

您无法将参考对象与==进行比较,ArrayList不是原始数据类型。