📅  最后修改于: 2023-12-03 15:16:19.731000             🧑  作者: Mango
在Java中,比较两个数组是否相等通常使用两个方法: equals()
和 deepEquals()
。
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
这个示例中,尽管 arr1
和 arr2
的元素相等,但 equals()
方法返回了 false,因为在内存中它们的地址不同。
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
在这个示例中,两个数组 arr1
和 arr2
的所有元素在相同位置上都是相等的,因此 deepEquals()
方法返回了 true
。
但 arr1
和 arr3
在同样位置的元素却不相等,故 deepEquals()
方法返回了 false。
equals()
方法只比较两个数组的地址,即它们是否引用同一对象。deepEquals()
方法会比较两个数组的每个元素,只有所有元素都相等,它们才会被认为是相等的。Arrays
类提供了重载版本的 equals()
和 deepEquals()
方法,它们可直接作用于这些类型的数组。