如何在 Java 中比较两个数组?

2025年3月25日 | 阅读 4 分钟

在 Java 中,我们可以通过比较数组的每个元素来比较两个数组。Java 的Arrays类提供了两个预定义方法,用于比较 Java 中的两个数组

在本节中,我们将学习如何使用Arrays.equals()方法和Arrays.deepEquals()方法比较两个数组。除此之外,我们还将学习如何对两个数组执行深度比较,并提供相应的示例。

如果满足以下条件,则两个数组相等:

  • 它们是相同类型的。
  • 它们具有相同的元素数量。
  • 两个数组中对应元素对必须相等。
  • 元素的顺序必须相同。
  • 两个数组引用相等,如果它们都为 null。

在开始讨论主题之前,首先考虑以下示例并猜测输出。

ArrayEqualsExample1.java

输出

Arrays are not equal.

在上面的示例中,a1 和 a2 是两个不同对象的引用。当我们比较两个引用变量时,我们得到输出数组不相等,尽管两个数组的长度相等,并且包含相同的元素。我们没有得到期望的输出,因为 equals (==) 运算符将它们作为对象进行比较。

现在,我们只有一个选项来比较两个数组,即比较数组的内容(元素)。让我们看看如何比较数组内容。

逐个比较元素会更好。为了比较数组的内容,Java 的Arrays类提供了以下两种方法来比较两个数组:

  • equals() 方法
  • deepEquals() 方法

Arrays.equals() 方法

JavaArrays类提供了equals()方法来比较两个数组。它遍历数组的每个值,并使用 equals() 方法比较元素。

语法

它解析要比较的两个数组 a1 和 a2。如果数组相等,则该方法返回 true,否则返回 false。Arrays 类为不同的原始类型和 Object 类型提供了一系列重载的 equals() 方法。

注意:在使用对象数组时,不要忘记覆盖 equals() 方法。否则,我们将获得 Object 类 equals() 方法返回的输出。

ArrayEqualsExample2.java

输出

Arrays are equal.

让我们看另一个例子。

ArrayEqualsExample3.java

输出

Are array1 and array2 equal? false
Are array1 and array3 equal? true

我们看到Arrays.equals()方法比较数组的元素。这里,出现了一个问题,如果一个数组包含嵌套数组或其他引用指向不同的对象但具有相同的值,该怎么办?

让我们通过以下示例来理解。

ArrayEqualsExample4.java

输出

Arrays are not equal.

在上面的示例中,我们看到 equals() 方法无法执行深度比较。为了解决这个问题,Java Arrays 类提供了另一个方法 deepEquals(),它可以深度比较两个数组。

Arrays.deepEquals() 方法

Java 的Arrays类提供了另一个方法deepEquals()来深度比较数组。这里,深度比较意味着它可以比较任意深度的两个嵌套数组。两个数组对象引用 e1 和 e2 是深度相等的,如果它们满足以下任一条件:

  • e1 = e2
  • equals(e2) 返回 true。
  • 如果 e1 和 e2 都是相同的原始类型,则方法 Arrays.equals(e1, e2) 的重载返回 true。
  • 如果 e1 和 e2 都是对象引用类型的数组,则方法 Arrays.deepEquals(e1, e2) 返回 true。

语法

该方法解析要比较的两个数组 a1 和 a2。如果两个数组深度相等,则返回 true,否则返回 false。

让我们创建一个程序,并使用 Arrays 类的deepEquals()方法深度比较两个数组。

ArrayEqualsExample5.java

输出

Arrays are equal.