Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这些行是Java开发工具包的一部分?_Java_Equals_Abstractset - Fatal编程技术网

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

为什么这些行是Java开发工具包的一部分?,java,equals,abstractset,Java,Equals,Abstractset,人们对我的问题感到困惑。那么,让我们重新制定。为什么开发人员要使用AbstractSet中的前两行?为什么我要比较object.equals(object)?如果它们共享相同的引用,它们不是已经相等了吗?在什么情况下程序员会想要那个检查?我能想到的唯一一个是你得到的一个物体,你不知道它从哪里来,通过不知道来源,你可以快速检查它们是否相同。这个假设正确吗 public boolean equals(Object o) { if (o == this) return tru

人们对我的问题感到困惑。那么,让我们重新制定。为什么开发人员要使用AbstractSet中的前两行?为什么我要比较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);
}
公共布尔等于(对象o)
{ 
如果(o==这个)
返回true;
集合c=(集合)o;
如果(c.size()!=size())
返回false;
返回(c);
}

如果内存地址中的对象引用等于此,则返回true

if (o == this)
        return true;

参见post

equals方法不仅需要正确,还需要快速。此外,它不知道有关传入对象的任何信息,也不能做出任何假设。一个非常快速的检查是参考比较。如果它们有相同的引用,您可以在不重复集合的情况下快速给出答案。

我不理解这个问题。
this==this
。。。对象本身是相等的,为什么会是false呢?它是通过将
this
o
=
操作符进行比较来执行的,如果它们匹配,则返回
true
。这只是一条捷径,可以避免比较
列表中的每个元素,如果传入的
o
this
具有相同的引用,即,您正在使用相同的对象实例调用
equals
。“我为什么要比较if-object.equals(object)?如果它们共享相同的引用,它们不是已经相等了吗?”是的,它们是。但打电话的人可能不知道这一点。这是一个优化。这是
equals
实现中非常常见的优化。