为什么这些行是 Java 开发工具包的一部分?

Why are these lines part of the Java Development Kit?

人们对我的问题感到困惑。所以让我们重新制定。为什么开发人员会使用 AbstractSet 中的前两行?为什么我要比较 if object.equals(object)?如果他们共享相同的引用,他们不是已经相等了吗?在什么情况下程序员会想要检查?我能想到的唯一一个是你得到一个你不知道它来自哪里的对象,并且通过不知道来源,你可以快速检查它们是否相同。这个假设是否正确?

public boolean equals(Object o)
{ 
    if (o == this)
        return true;

    Collection<?> c = (Collection<?>) o;

    if (c.size() != size())
        return false;

    return containsAll(c);
}

如果内存地址中的对象引用等于this,则return为真。

if (o == this)
        return true;

参见 this post

equals方法不仅要正确,还要。此外,它对传入对象一无所知,也无法做出任何假设。一个非常快速的检查是参考比较。如果他们有相同的引用,你可以在不遍历集合的情况下给出非常快速的答案。