java如何搜索内容与另一个匹配的数组?
我有一个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?-错误
什么给了
# 1 楼答案
Java中的数组是对象
当您使用
==
运算符时,您正在比较Location
是否与Testloc
是相同的数组,而不是相同的数组。您真正想要的是比较每个数组中的值,看看它们是否相等您可以使用^{} 静态方法来比较两者是否相等,而不是自己编写
# 2 楼答案
通过将数组与==进行比较,可以检查它们是否是相同的数组。您必须遍历每个数组并检查TestLoc[i]==Location[i]。你也许可以使用。equals(),我不记得java是否有。数组的等于()
# 3 楼答案
最好是获取一个数据类,例如坐标来存储数据并重写equals方法。如果只存储电话号码,另一个选项是使用字符串来表示格式良好的电话号码,并使用
String
类的equals方法# 4 楼答案
这对我很有用:
# 5 楼答案
Java的数组相等是标识相等。您需要创建一个实际的
Coordinate
类换句话说:
# 6 楼答案
问题似乎与以下行有关:
据推测,
TestLoc
是一个整数数组,Location
也绑定到一个数组如果
TestLoc
和Location
变量都指向同一个数组实例,则上述测试将仅返回true;如果这两个变量指向不同的数组实例且恰好在相同位置具有相同整数,则不会返回true。您正在测试上面的“引用相等”,只询问这两个事物是否相同事物——而不是“值相等”,即询问两个事物是否相等而不管它们是否在计算机内存空间中表示为两个不同的对象有些编程语言没有这样的区别,有些语言允许定义新类型,这些类型被更好地视为值,其中标识不重要,而不是实体,其中标识可能比任何可能的值等价更重要。Java使用一个独特的方法
Object#equals()
来查询Object
实例的等价性或值相等性,而==
操作符总是只做一件事:它计算任意两个对象的值相等性,即使它们是对象引用因此,当您在这里比较两个数组实例时,
Object
操作符询问的不是这些引用指向的两个对象是否相等,而是引用本身的值是否相等。如果它们恰好指向同一个目标对象,那么它们是等价的,但是如果它们没有,那么两个不同的目标对象在值上是否相似并不重要==
返回false,因为两个目标对象由不同的引用表示