众所周知,如果对象的equals()方法没有被覆盖,则它是一种“浅比较”,相当于使用“==”运算符。(例如,请参阅https://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html。)
问题:为什么Java默认不提供“深度比较”的equals()方法?也就是说,在每个实例变量上递归调用equals()方法。最终,递归将到达基元类型并停止。如果这个深度比较的equals方法成为默认值,是否有任何缺点?
问题:为什么Java默认不提供“深度比较”的equals()方法?也就是说,在每个实例变量上递归调用equals()方法。最终,递归将到达基元类型并停止。如果这个深度比较的equals方法成为默认值,是否有任何缺点?
Arrays
有一个deepEquals
方法,它知道如何进行深度比较。如果你想调用deepEquals
,你可以重写equals
并调用Objects.deepEquals(o1,o2)
,但是equals()
也能完成同样的工作。 - SomeDudeequals()
方法的equals()
方法。这将避免运行时反射的开销。 - flow2k