a.equals(b)和array.equals(a,b)之间的差异

时间:2015-05-13 15:23:38

标签: java arrays

我已经运行了这个小程序:

String[] a = {"a","b"};
String[] b = {"a","b"};


    if (a.equals(b)){
        System.out.println("woop");
    }else{
        System.out.println("doh!");
    }


    if (Arrays.equals(a, b)){
        System.out.println("woop");
    }else{
        System.out.println("doh!");
    }

程序的输出是" doh! WOOP"

我得到了==和.equals之间的区别但是这些等于操作之间有什么区别?

4 个答案:

答案 0 :(得分:3)

<强> TL; DR

equals比较数组实例,Arrays.equals比较数组元素。

完整说明

数组不实现equals。结果,他们将方法移交给Object,其实现如下。

public boolean equals(Object obj) {
   return (this == obj);
}

因此,数组上的equals==相同。

Arrays.equals具有以下描述。它比较了数组的元素。

  

如果两个指定的long数组彼此相等,则返回true。如果两个数组包含相同数量的元素,则两个数组被认为是相等的,并且两个数组中的所有相应元素对相等。换句话说,如果两个数组包含相同顺序的相同元素,则它们是相等的。此外,如果两个数组引用都为空,则认为它们相等。

答案 1 :(得分:2)

Arrays.equals(Object[] a, Object[] a2) ...

  如果两个指定的Objects数组彼此相等,则

返回true。如果两个数组包含相同数量的元素,则两个数组被认为是相等的,并且两个数组中的所有相应元素对是相等的。如果(e1 == null?e2 == null:e1.equals(e2)),则认为两个对象e1和e2相等。换句话说,如果两个数组包含相同顺序的相同元素,则它们是相等的。此外,如果两个数组引用都为空,则认为它们相等。

简而言之,您的所有String都会通过equals进行比较。

API

将两个数组与Object.equals惯用语进行比较时调用的

array1.equals(array2)比较引用,就像==一样。

请参阅java.lang.Object的来源:

public boolean equals (Object o) {
    return this == o;
}

答案 2 :(得分:1)

区别在于a.equals(b)将使用==在引擎盖下,因为数组不会覆盖Object.equals()方法。您可以使用它来测试数组之间的实例相等性

因此,在您的情况下,a.equals(b)将返回false,因为这两个数组是不同的实例。

相反,Arrays.equals()实际上比较了数组中内部的内容。如果数组包含相同的值,则Arrays.equals()返回true。您可以使用它来测试数组之间的语义相等

答案 3 :(得分:1)

对于数组,a.equals(b)a == b相同。这是检查两个数组实例是否相同。 Arrays.equals(a,b)花时间比较两个数组的每个元素,并检查元素是否相等,这与检查容器本身是否相等不同。

一个简单的类比:让我们说 a b 是桶。询问两个桶是否相同与询问桶中的内容是否相同是相同的。