即使在java中对象的状态相同,equals也给出false

ANK*_*AVA 0 java

我的代码看起来有点像这样:

public class EqualityTrial {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    EqualityTrail1 obj1 = new EqualityTrail1();
    obj1.setName("Ankit");
    obj1.setAge(23);
    EqualityTrail1 obj2 = new EqualityTrail1();
    obj2.setName("Ankit");
    obj2.setAge(23);

    if(obj1 == obj2){
        System.out.println("== gave true");
    }else{
        System.out.println("== gave false");
    }
    if(obj1.equals(obj2)){
        System.out.println("equals gave true");
    }else{
        System.out.println("equals gave false");
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

每次条件都是假的.我知道==比较引用是否指向同一个对象,在这种情况下不是那么假是正确的结果但是在'equals'方法的情况下,据我所知它比较两个对象的状态...如果状态同样的方法应该返回true,即使两个对象的状态相同,在这种情况下返回false.我错过了什么吗?

Era*_*ran 5

equals仅当您在EqualityTrail1类中使用比较状态的实现覆盖它时才比较状态.如果不覆盖它,则使用默认实现(来自Object类),并且该实现比较引用(因此它的行为将完全相同==).

可能的实施:

public class EqualityTrail1 
{
    ...
    @Override
    public boolean equals (Object other)
    {
         if (!(other instanceof EqualityTrail1))
             return false;
         EqualityTrail1 oet = (EqualityTrail1) other;
         return this.name.equals(oet.name) && this.age == oet.age;
    }

}
Run Code Online (Sandbox Code Playgroud)