为什么这些行是Java开发工具包的一部分?
人们对我的问题感到困惑。那么,让我们重新制定。为什么开发人员要使用AbstractSet中的前两行?为什么我要比较object.equals(object)?如果它们共享相同的引用,它们不是已经相等了吗?在什么情况下程序员会想要那个检查?我能想到的唯一一个是你得到的一个物体,你不知道它从哪里来,通过不知道来源,你可以快速检查它们是否相同。这个假设正确吗为什么这些行是Java开发工具包的一部分?,java,equals,abstractset,Java,Equals,Abstractset,人们对我的问题感到困惑。那么,让我们重新制定。为什么开发人员要使用AbstractSet中的前两行?为什么我要比较object.equals(object)?如果它们共享相同的引用,它们不是已经相等了吗?在什么情况下程序员会想要那个检查?我能想到的唯一一个是你得到的一个物体,你不知道它从哪里来,通过不知道来源,你可以快速检查它们是否相同。这个假设正确吗 public boolean equals(Object o) { if (o == this) return tru
public boolean equals(Object o)
{
if (o == this)
return true;
Collection<?> c = (Collection<?>) o;
if (c.size() != size())
return false;
return containsAll(c);
}
公共布尔等于(对象o)
{
如果(o==这个)
返回true;
集合c=(集合)o;
如果(c.size()!=size())
返回false;
返回(c);
}
如果内存地址中的对象引用等于此,则返回true
if (o == this)
return true;
参见postequals方法不仅需要正确,还需要快速。此外,它不知道有关传入对象的任何信息,也不能做出任何假设。一个非常快速的检查是参考比较。如果它们有相同的引用,您可以在不重复集合的情况下快速给出答案。我不理解这个问题。
this==this
。。。对象本身是相等的,为什么会是false呢?它是通过将this
与o
与=
操作符进行比较来执行的,如果它们匹配,则返回true
。这只是一条捷径,可以避免比较列表中的每个元素,如果传入的o
与this
具有相同的引用,即,您正在使用相同的对象实例调用equals
。“我为什么要比较if-object.equals(object)?如果它们共享相同的引用,它们不是已经相等了吗?”是的,它们是。但打电话的人可能不知道这一点。这是一个优化。这是equals
实现中非常常见的优化。