对象的含义.deepEquals 方法

2022-09-03 05:57:04

这个问题是关于静态方法类的(因为):Objects.deepEqualsJava 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

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

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


答案 1

如果传递了 Array 对象,则比较会很深

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

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

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

引用自 :

Object.deepEquals


答案 2

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

Arrays.deepEquals 看起来真的很深

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

  1. 循环通过输入数组,获取每对
  2. 分析每对的类型
  3. 将相等决定逻辑委托给其中一个重载数组。如果它们是基元数组之一,则等于
  4. 递归委托给 Arrays.deepEquals(如果它是 Object array)
  5. 为任何其他对象调用相应对象的 equals