Objects.deepEquals方法

时间:2015-12-30 09:47:02

标签: java

问题是关于静态方法Objects.deepEquals class(自Java 7):

public static boolean deepEquals(Object a, Object b) {
    if (a == b)
        return true;
    else if (a == null || b == null)
        return false;
    else
        return Arrays.deepEquals0(a, b);
}

正如它在javadoc中所说的那样:

  

如果参数彼此非常相等且为false,则返回true   否则。

我不明白:比较的深度在哪里?正如我们在其实现中看到的那样,它只是进行引用比较,并且在Arrays.deepEquals0(a, b)内部对于简单的ObjectObject参数进行调用 只是:eq = e1.equals(e2);。那么在什么样的意义上,两个对象深度相等?

2 个答案:

答案 0 :(得分:16)

如果您传递了Array对象,那么比较将是 deep

非数组对象的评估不会比使用equals得到的更深。

因此深度与您的情况无关:

  

两个空值非常相等。 如果两个参数都是数组,那么   Arrays.deepEquals中的算法用于确定相等性。   否则,通过使用equals方法确定相等性   第一个论点。

引自:

Object.deepEquals

答案 1 :(得分:2)

您可以参考:Your's Deeply - Why Arrays.deepEquals When We Have Arrays.equals

  

Arrays.deepEquals看起来很深

     

从源头上我们可以理解Arrays.deepEquals

     
      
  1. 循环输入数组,获取每一对
  2.   
  3. 分析每对的类型
  4.   
  5. 将相等的决定逻辑委托给其中一个重载的   Arrays.equals,如果它们是原始数组之一
  6.   
  7. 如果它是一个Object数组
  8. ,则递归地委托给Arrays.deepEquals   
  9. 为任何其他对象调用相应对象的等号
  10.