我是java的新手。请帮帮我。
我想比较Array对象和两个数组中的每个元素。那么我应该使用什么来检查它们是否相同:equals
,deepEquals
或compareTo
?
答案 0 :(得分: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
但是当我更改i2
来自i1
的点数组时,等于将返回true
a2=a1;//now my i2 reference points array from i1
System.out.println(a1.equals(a2));//true
要比较数组中的元素,需要迭代数组。您可以编写自己的代码来执行此操作,也可以使用可以为您执行此操作的现成方法。 Java在类java.util.Arrays
中提供了这样的方法,但是没有人阻止你使用像Apache Commons这样的其他库 - &gt; ArrayUtils类。
答案 1 :(得分:1)
正如api所说,ArrayUtils.equals进行浅层比较。 Arrays / ArrayUtils.deepEquals进行深度比较......&lt;&lt;这可能是你想要的(deepEquals),除非你有理由只想进行浅层比较