判断两个数组是否相等测试时,可以使用 Arrays.equals()
函数 。
public static boolean equals(Object[] a, Object[] a2)
的API文档如下所示:
如果两个指定的对象数组彼此相等 ,则返回true 。 如果两个数组都包含相同数量的元素,则两个数组被认为是相等的,并且两个数组中所有对应的元素对都相等。 如果
(e1 == null ? e2 == null : e1.equals(e2))
,两个对象e1和e2被认为是相等的 。换句话说,如果两个数组在相同的顺序中包含相同的元素,则它们是相等的。 另外,如果两个数组引用都是null,则两个数组引用被认为是相等的 。参数
a - 要测试相等的一个数组
a2 - 要进行相等测试的另一个数组结果
true 如果两个数组相等
Object
类的public boolean equals(Object obj)
函数API文档如下所示
两个数组在相同的顺序中包含相同的元素,则它们是相等的。但是,当需求是元素的成员属性相同则类相同,则需要自己重写equals()
函数来覆盖Object.equals()
public class Main {
public static void main(String[] args) throws Exception {
// 数组中是基本类型 没问题
int[] ary = {1, 2, 3, 4, 5, 6};
int[] ary1 = {1, 2, 3, 4, 5, 6};
int[] ary2 = {1, 2, 3, 4};
System.out.println("数组 ary 是否与数组 ary1相等? :"
+ Arrays.equals(ary, ary1));
System.out.println("数组 ary 是否与数组 ary2相等? :"
+ Arrays.equals(ary, ary2));
// 如果是自己定义的类,虽然实例域相同但是还是输出false
MyClass[] ary3 = new MyClass[2];
ary3[0] = new MyClass(0,"a");
ary3[1] = new MyClass(1,"b");
MyClass[] ary4 = new MyClass[2];
ary4[0] = new MyClass(0,"a");
ary4[1] = new MyClass(1,"b");
System.out.println("数组 ary3 是否与数组 ary4相等? :"
+ Arrays.equals(ary3, ary4));
}
}
class MyClass{
private int myInt;
private String myStr;
MyClass(int myInt, String myStr){
this.myInt = myInt;
this.myStr = myStr;
}
}
参考
[1] Cay S. Horstmannn.Java核心技术 卷I 基础知识(原书第10版)[M].机械工业出版社:北京,2017:166.
[2] Java 实例 - 判断数组是否相等