我是java新手。请帮帮我。
我想比较 Array 对象,以及两个数组中的每个元素。那么我应该用什么来检查它们是否相同:equals
,deepEquals
或compareTo
?
我不确定我是否理解您的问题,但也许这会对您有所帮助。
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
对点数组的引用时,将返回i1
true
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 类。
正如 api 所说, ArrayUtils.equals 进行了浅比较。Arrays/ArrayUtils.deepEquals 进行深度比较... << 这可能是您想要的(deepEquals),除非您有理由只想要浅比较