【发布时间】:2012-06-21 14:44:37
【问题描述】:
我是 Java 新手。请帮帮我。
我想比较 Array 对象以及两个数组中的每个元素。那么我应该使用什么来检查它们是否相同:equals、deepEquals 或compareTo?
【问题讨论】:
-
欢迎您!到目前为止,您尝试过什么?
-
您是在数组中存储复杂的对象吗?
我是 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
但是当我将i2 的引用从i1 更改为点数组时,equals 将返回true
a2=a1;//now my i2 reference points array from i1
System.out.println(a1.equals(a2));//true
要比较数组中的元素,您需要遍历数组。您可以编写自己的代码来执行此操作,也可以使用现成的方法为您执行此操作。 Java 在 java.util.Arrays 类中提供了这样的方法,但没有人阻止你使用其他库,如 Apache Commons -> ArrayUtils 类。
【讨论】:
正如 api 所说,ArrayUtils.equals 进行了浅层比较。 Arrays/ArrayUtils.deepEquals 进行深度比较...
【讨论】: