instanceof运算符如何在覆盖equls()方法时工作

时间:2017-07-24 08:12:53

标签: java

我想知道instanceof运算符是如何在覆盖equals()方法的 在这个例子中," obj instanceof FooForEqual"是回报"是"在重写的equals()中。有人可以解释一下吗?

public class EqualsTest {

    public static void main(String[] args) 
    {
        FooForEqual ffe1=new FooForEqual(23);
        FooForEqual ffe2=new FooForEqual(23);
        if (ffe1.equals(ffe2)) 
        {
            System.out.println("both objects are equal");
        }
        else
            System.out.println("both objects are not equal");
    }
}

class FooForEqual
{
    private int fooForEqualValue;
    public FooForEqual(int number) {this.fooForEqualValue=number;}

    public int getFooForEqualValue() {
        return fooForEqualValue;
    }

    @Override
    public boolean equals(Object obj) 
    {
        if (obj instanceof FooForEqual && (  ((FooForEqual) obj).getFooForEqualValue()==this.fooForEqualValue)) {
            return true;
    }
     else 
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

如果要将obj instanceof FooForEqual的实例(或FooForEqual的子类)作为FooForEqual方法的参数传递,

equals将返回true。

这意味着对象的一个​​条件等于FooForEqual类的实例是FooForEqual的实例。

obj instanceof FooForEqual评估为true后,equals方法可以安全地将obj转换为FooForEqual,并进一步比较两个FooForEqual的属性确定相等的实例。