java中的任何数组都是Object
。因此它有equals
方法。但我无法看到这种方法的实现(或者可能是可能的?)
我写了几个例子,==
和equals
总是返回类似的结果。
==
和equals
会有不同的结果吗?
答案 0 :(得分:7)
存在差异
1)
int[] a1 = {};
long[] a2 = {};
boolean r1 = a1.equals(a2); // returns false
boolean r2 = a1 == a2; // compile time error
2)
int[] a1 = null;
int[] a2 = {};
boolean r1 = a1.equals(a2); // throws NPE
boolean r2 = a1 == a2; // returns false
答案 1 :(得分:2)
我不认为这是equals
方法:
public boolean equals(Object obj) {
return (this == obj);
}
它在内部使用==
运算符进行比较。
您可以查看javaDoc here。
答案 2 :(得分:0)
只需在测试类中编写此测试
@Test
public void testArray() {
int[] A = {1,2};
int[] B = {1,2};
assertTrue(Arrays.equals(A, B));
assertTrue(A.equals(B));
assertTrue(A == B);
}
一般来说" =="比较地址,而.equals()将使用取决于对象的对象equals进行比较(与File对象的比较与对整数的比较不同)。
编辑:
我的坏,这实际上是错的, ==和equals在java中实际上是相同的: equals vs Arrays.equals in Java
对于阵列,它确实是相同的,我必须说很混乱。 我修改了我的测试以显示差异。