2

我是java新手。请帮帮我。

我想比较 Array 对象,以及两个数组中的每个元素。那么我应该用什么来检查它们是否相同:equals,deepEqualscompareTo?

4

2 回答 2

2

我不确定我是否理解您的问题,但也许这会对您有所帮助。

Arrays.equals(array1, array2)与一维数组一起使用,例如int[10]. Arrays.deepEquals(array1,array2)用于一维或多维数组,例如int[2][4]. 根据您要比较的数组的维数选择一个。

编辑

您的评论代码无法编译,但我开始理解您的问题。您需要知道数组是对象,默认情况下它们在equals(Object obj)方法中返回this == obj。这意味着它们不会通过存储在其中的值来比较数组,而只会检查来自其他对象obj(其他数组)的引用是否包含对您正在比较的同一数组的引用(this)。

你可以这样检查

Integer[] a1=new Integer[2];
Integer[] a2=new Integer[2];
for (int i=0; i<2; i++){
    a1[i]=i;
    a2[i]=a1[i];
}
System.out.println(a1.equals(a2));//false

但是当我从equals更改i2对点数组的引用时,将返回i1true

a2=a1;//now my i2 reference points array from i1
System.out.println(a1.equals(a2));//true

要比较数组中的元素,您需要遍历数组。您可以编写自己的代码来执行此操作,也可以使用现成的方法为您执行此操作。Java 在 class 中提供了这样的方法java.util.Arrays,但没有人阻止您使用其他库,如 Apache Commons -> ArrayUtils 类。

于 2012-06-21T14:52:46.497 回答
1

正如 api 所说, ArrayUtils.equals 进行了浅比较。Arrays/ArrayUtils.deepEquals 进行深度比较... << 这可能是您想要的(deepEquals),除非您有理由只想要浅比较

于 2012-06-21T14:48:15.540 回答