我有两个像这样的对象数组:
Object[] array1 = {0, 1, 2, 3};
Object[] array2 = {0, 1, 2, 3};
我想知道数组是否相等。我定义相等,因为array1中的每个值都与array2中该位置的值相同。所以这两个数组是相同的。
找出这两个数组是否相等的最佳原因是什么?
if(array1 == array2)
不是一个深度等于所以不起作用,我不知道是否循环每个元素并比较它们是解决这个问题的最佳和最有效的方法。有没有人有更好的建议?
编辑:我需要一个可以进入嵌套数组的等号。
答案 0 :(得分:21)
使用Arrays.deepEquals()
。这与Arrays.equals()
完成相同的工作,但也适用于嵌套数组。
如果两个指定的数组彼此非常相等,则返回true。与
equals(Object[],Object[])
方法不同,此方法适用于任意深度的嵌套数组。如果两个数组引用都为null,或者它们引用包含相同数量元素的数组并且两个数组中所有相应的元素对完全相等,则认为两个数组引用非常相等。
如果满足以下任何条件,则两个可能为空的元素e1和e2非常相等:
- e1和e2都是对象引用类型的数组,而Arrays.deepEquals(e1,e2)将返回true
- e1和e2是相同基元类型的数组,Arrays.equals(e1,e2)的相应重载将返回true。
- e1 == e2
- e1.equals(e2)将返回true。
请注意,此定义允许任何深度的null元素。
如果任一指定的数组直接或间接通过一个或多个数组级别将自身包含为元素,则此方法的行为是未定义的。
答案 1 :(得分:9)
java.util.Arrays.equals
/**
* Returns <tt>true</tt> if the two specified arrays of Objects are
* <i>equal</i> to one another. The two arrays are considered equal if
* both arrays contain the same number of elements, and all corresponding
* pairs of elements in the two arrays are equal. Two objects <tt>e1</tt>
* and <tt>e2</tt> are considered <i>equal</i> if <tt>(e1==null ? e2==null
* : e1.equals(e2))</tt>. In other words, the two arrays are equal if
* they contain the same elements in the same order. Also, two array
* references are considered equal if both are <tt>null</tt>.<p>
*
* @param a one array to be tested for equality.
* @param a2 the other array to be tested for equality.
* @return <tt>true</tt> if the two arrays are equal.
*/
public static boolean equals(Object[] a, Object[] a2)
答案 2 :(得分:3)
为了比较数组,我会使用Arrays.equals方法:
if (Arrays.equals(array1, array2))
{
// array1 and array2 contain the same elements in the same order
}
答案 3 :(得分:2)
在您发布的示例中,数组实际上包含Integer
个对象。在这种情况下,Arrays.equals()
就足够了。但是,如果您的数组包含您的某些对象,则必须在您的类中实现equals()
,以便Arrays.equals()
工作
答案 4 :(得分:0)
array1.equals(array2)
应该可以为您提供所需内容。
答案 5 :(得分:0)
一般来说,实用工具类java.util.Arrays非常有用。