为什么这些行是 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方法不仅要正确,还要快。此外,它对传入对象一无所知,也无法做出任何假设。一个非常快速的检查是参考比较。如果他们有相同的引用,你可以在不遍历集合的情况下给出非常快速的答案。
人们对我的问题感到困惑。所以让我们重新制定。为什么开发人员会使用 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方法不仅要正确,还要快。此外,它对传入对象一无所知,也无法做出任何假设。一个非常快速的检查是参考比较。如果他们有相同的引用,你可以在不遍历集合的情况下给出非常快速的答案。