Java 当查看列表中的元素时,相等是否应用于自身?

Java 当查看列表中的元素时,相等是否应用于自身?,java,list,object,equals,Java,List,Object,Equals,我有一个带有位置值(x,y)的对象列表。当我询问此列表中的一个对象是否等于当前对象时,当与此列表中的自身进行比较时,函数是否返回true 基本上: foreach(MyObject o : list){ foreach(MyObject o2 : list){ if(o.equals(o2)) doSomething(); } } @Override public boolean equals(Object obj) { if(o

我有一个带有位置值(x,y)的对象列表。当我询问此列表中的一个对象是否等于当前对象时,当与此列表中的自身进行比较时,函数是否返回true

基本上:

foreach(MyObject o : list){
    foreach(MyObject o2 : list){
        if(o.equals(o2))
            doSomething();
    }
}

@Override
public boolean equals(Object obj)
{
    if(obj instanceof MyObject) 
    {
        MyObject tmp = (MyObject)obj;
        return this.getPosition().equals(tmp.getPosition());
    }
    return false;
}

如果希望循环在将元素与自身进行比较时避免返回假阳性,可以将以下内容添加到条件中:

for (MyObject o : list){
    for (MyObject o2 : list){
        if (o != o2 && o.equals(o2))
            doSomething();
    }
}

这将确保只有两个彼此相等的不同实例(即
o
o2
不引用同一对象)将触发
doSomething()

是,这取决于equals的实现。感谢您的帮助,Eran;-)