arr.equals(anotherArr)和arr == anotherArr之间有区别吗?

时间:2014-05-22 08:16:47

标签: java arrays equals equality

java中的任何数组都是Object。因此它有equals方法。但我无法看到这种方法的实现(或者可能是可能的?)

我写了几个例子,==equals总是返回类似的结果。

==equals会有不同的结果吗?

3 个答案:

答案 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

对于阵列,它确实是相同的,我必须说很混乱。 我修改了我的测试以显示差异。