问题是关于静态方法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)
内部对于简单的Object
和Object
参数进行调用
只是:eq = e1.equals(e2);
。那么在什么样的意义上,两个对象深度相等?
答案 0 :(得分:16)
如果您传递了Array对象,那么比较将是 deep 。
非数组对象的评估不会比使用equals
得到的更深。
因此深度与您的情况无关:
两个空值非常相等。 如果两个参数都是数组,那么 Arrays.deepEquals中的算法用于确定相等性。 否则,通过使用equals方法确定相等性 第一个论点。
引自:
答案 1 :(得分:2)
您可以参考:Your's Deeply - Why Arrays.deepEquals When We Have Arrays.equals
Arrays.deepEquals看起来很深
从源头上我们可以理解Arrays.deepEquals
- 循环输入数组,获取每一对
- 分析每对的类型
- 将相等的决定逻辑委托给其中一个重载的 Arrays.equals,如果它们是原始数组之一
- 如果它是一个Object数组
,则递归地委托给Arrays.deepEquals- 为任何其他对象调用相应对象的等号
醇>