如何搜索其内容与另一个匹配的数组?

时间:2011-08-08 15:24:48

标签: java arrays reference contains equality

我有一个int数组的ArrayList,当我询问它是否包含指定的坐标时返回false。 确实包含我请求的坐标,因此它应返回TRUE。

这是我的代码。

    //debug code
    for (int i = 0; i < Locations.size(); i++)
    {
        int[] TestLoc = Locations.get(i);

        System.out.print(TestLoc[0] + " " + TestLoc[1] + " " + TestLoc[2] + " == " + Location[0] + " " + Location[1] + " " + Location[2] + "? - ");

        if (Location == TestLoc)
        {
            System.out.println("TRUE");
        }

        else
        {
            System.out.println("FALSE");
        }
    }

    //real code
    if (Locations.contains(Location))
    {
        Locations.remove(Location);
    }

    else
    {
        System.out.println("FAIL");
    }

输出,当列表包含4个坐标时请求坐标57,64,105。

56 64 105 == 57 64 105? - 错误

56 64 106 == 57 64 105? - 错误

56 64 107 == 57 64 105? - 错误

57 64 105 == 57 64 105? - 错误

是什么给了???

6 个答案:

答案 0 :(得分:7)

Java的数组等于身份相等。您需要创建一个实际的Coordinate类。

换句话说:

int[] c1 = new int[] { 1, 2 };
int[] c2 = new int[] { 1, 2 };
System.out.println(c1.equals(c2)); // prints false

答案 1 :(得分:3)

最好的方法是获取数据类,例如Coordinate存储数据并覆盖equals方法。另一种选择,如果你只是存储电话号码,可能是使用字符串来重新发送格式正确的电话号码,并使用String类的equals方法。

答案 2 :(得分:3)

Java中的数组是对象。

当您使用==运算符时,您正在比较Location是否与Testloc相同,而不是{{1}}。你真正想要的是比较每个数组中的值,看它们是否相等。

您可以使用Arrays.equals()静态方法来比较两者的相等性,而不是自己编写。

答案 3 :(得分:2)

问题似乎在以下一行:

if (Location == TestLoc)

据推测,TestLoc是一个整数数组,Location也绑定到数组。

如果TestLocLocation变量都指向相同的数组实例,则上述测试仅返回true,如果这两个变量指向,则不会返回true不同的数组实例,它们碰巧在相同的位置具有相同的整数。您正在测试上面的“引用相等” - 仅询问​​这两个事物是否相同事物 - 与“值相等”相反,它会询问两个事物是否相等 ,无论它们是否在计算机的存储空间中表示为两个不同的对象。

有些编程语言缺乏这样的区别,有些编程语言允许定义更好地被视为值的新类型 - 其中身份是​​无关紧要的 - 而不是实体,其中身份可能比任何可能的值等价更重要。 Java使用一种独特的方法 - Object#equals() - 来查询Object实例的等价或值相等,而==运算符总是只做一件事:它评估任何两个事物的值相等,甚至如果那些东西是对象引用

因此,在比较两个数组实例时,两者都是Object的某种类型,==运算符不会询问指向的两个内容这些引用是等价的,而是引用本身的是否相同。如果它们碰巧指向同一个目标对象,那么它们是等价的,但如果它们不相同,那么两个不同的目标对象在值上是否相似并不重要; ==返回false,因为两个目标对象由不同的引用表示。

答案 4 :(得分:1)

通过将数组与==进行比较,您将检查它们是否是同一个数组。你必须遍历每个数组并检查TestLoc [i] == Location [i]。您可以使用.equals(),我不记得java是否有.equals()数组

答案 5 :(得分:1)

这对我有用:

List<int[]> l = new ArrayList<int[]>();
    l.add(new int[] {56, 64, 105});
    l.add(new int[] {56, 64, 105});
    l.add(new int[] {56, 64, 105});
    for (int i = 0; i < l.size(); i++)
    {
        int[] t = l.get(i);

        if (l.get(i) == t)
        {
            System.out.println("TRUE");
        }

        else
        {
            System.out.println("FALSE");
        }
    }