📜  Java中比较两个数组的equals()和deepEquals()方法(1)

📅  最后修改于: 2023-12-03 15:16:19.731000             🧑  作者: Mango

Java中比较两个数组的equals()和deepEquals()方法

在Java中,比较两个数组是否相等通常使用两个方法: equals()deepEquals()

1. equals()方法

equals()方法用于比较数组对象的内容是否相等。它是从 Object 类继承下来的,故它可以用于任何Java对象的比较。但是对于数组,equals()方法会比较它们的引用值(即它们在内存中的地址),即使两个数组对象它们的元素相等,如果它们的引用值不同,它们在 equals() 方法比较下将不相等。

  • 示例
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {3, 2, 1};

System.out.println(arr1.equals(arr2)); // false
System.out.println(arr1.equals(arr3)); // false
  • 解释:

这个示例中,尽管 arr1arr2 的元素相等,但 equals() 方法返回了 false,因为在内存中它们的地址不同。

2. deepEquals()方法

deepEquals() 方法也用于比较两个数组对象是否相等,不同在于它递归比较两个数组的每个元素。在两个数组的每个位置上分别比较它们的元素,只有所有的元素在数值和顺序上都相等,它们才会被认为是相等的。

  • 示例
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {3, 2, 1};

System.out.println(Arrays.deepEquals(arr1, arr2)); // true
System.out.println(Arrays.deepEquals(arr1, arr3)); // false
  • 解释:

在这个示例中,两个数组 arr1arr2 的所有元素在相同位置上都是相等的,因此 deepEquals() 方法返回了 true

arr1arr3 在同样位置的元素却不相等,故 deepEquals() 方法返回了 false。

3. 总结
  • equals() 方法只比较两个数组的地址,即它们是否引用同一对象。
  • deepEquals() 方法会比较两个数组的每个元素,只有所有元素都相等,它们才会被认为是相等的。
  • 对于基础数据类型,如 int,long 等,Arrays 类提供了重载版本的 equals()deepEquals() 方法,它们可直接作用于这些类型的数组。