Objects.deepEquals方法的含义

And*_*niy 12 java

问题是静态方法Objects.deepEquals类(自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);
}
Run Code Online (Sandbox Code Playgroud)

正如它在javadoc这种方法中所说:

如果参数彼此深度相等则返回true,否则返回false.

我不明白:比较的深度在哪里?正如我们在其实现中看到的那样,它只是进行引用比较,而Arrays.deepEquals0(a, b)对于简单ObjectObject参数,它只调用:eq = e1.equals(e2);.那么两种物体在什么样的意义上是完全相同的呢?

Arn*_*aud 17

如果你传递了Array对象,那么比较会很深.

非数组对象的评估不会比您获得的更深equals.

所以深度与您的情况无关:

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

引自:

Object.deepEquals


Rah*_*thi 5

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

\n\n
\n

Arrays.deepEquals 看起来真的很深

\n\n

从源码中我们可以了解到Arrays.deepEquals

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