Java Objects.deepEquals方法的含义

Java Objects.deepEquals方法的含义,java,equals,equality,Java,Equals,Equality,问题是关于静态方法对象。deepEquals类(因为Java7): 正如该方法的javadoc中所述: 如果参数彼此完全相等,则返回true;如果参数完全相等,则返回false 否则 我不明白的是:比较的深度在哪里?正如我们在它的实现内部所看到的,它只是引用比较,而在它调用的简单对象和对象的参数的数组中,deepEquals0(a,b) 刚好:eq=e1.等于(e2)。那么,在什么样的意义上,两个对象在深度上是相等的呢?如果传递数组对象,比较就会很深 非数组对象的求值深度不会超过使用equals

问题是关于静态方法
对象。deepEquals
类(因为
Java7
):

正如该方法的
javadoc
中所述:

如果参数彼此完全相等,则返回true;如果参数完全相等,则返回false 否则

我不明白的是:比较的深度在哪里?正如我们在它的实现内部所看到的,它只是引用比较,而在它调用的简单
对象和
对象的
参数的
数组中,deepEquals0(a,b)
刚好:
eq=e1.等于(e2)。那么,在什么样的意义上,两个对象在深度上是相等的呢?

如果传递数组对象,比较就会很深

非数组对象的求值深度不会超过使用
equals
得到的值

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

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

引自:

您可以参考:

Arrays.deepEquals看起来很深

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

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

  • 你说的是类对象,而不是object。我想它与深度副本的含义相同。您不比较引用,而是比较引用后面的数据。@raupach太棒了!非常感谢,我错了。但问题仍然是
    对象的Javadoc。deepEquals
    非常清楚地定义了深度相等的含义。如果您返回一个或两个编译时类型
    对象的参数,并且您知道它可能是数组,那么
    deepEquals
    方法将为您执行所有检查实例。我从未使用过它,但有些人可以想象我猜的真实用例(例如,依赖于第三方库)。
    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);
    }