Why these two Java objects do not equals?

可紊 提交于 2019-12-13 01:43:30

问题


I was make some code and found that objects ar eno equals - it is trivial question but not understand how default equals works.

class A {
    String id;
    public A(String id) {
        this.id = id;
    }

    public static void main(String args[])
    {
        A a = new A("1");
        A b = new A("1");
        System.out.println(a.id);
        System.out.println(b.id);
        System.out.println(a.equals(b));
    }
}

Result is:

1
1
false

But I want to have a.equals(b) == true why it is false?


回答1:


Your class currently extends only Object class and in Object class equals method looks like this

public boolean equals(Object obj) {
    return (this == obj);
}

What you need is to override this method, for example like this

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    A other = (A) obj;
    if (id == other.id)
        return true;
    if (id == null)
        return false;
    if (other.id == null)
        return false;
    if (!this.id.equals(other.id))
        return false;
    return true;
}

Also when you override equals you probably should override hashCode method, but this is not subject of your question. You can read more about it here.




回答2:


If you don't override equals() on the object, you are comparing two different memory references. So override equals() to compare the id fields.




回答3:


It overrides Object's equals method by default, it checks the "same object" rather than "same content". If you want to have a.equals(b) == true, you should override it:

@Override
public boolean equals (Object obj) {
    if (obj instanceof A) {
        A a = (A) obj;
        if (id == null) {
            return a.id == null;
        } else {
            return id.equals(a.id);
        }
    }
    return false;
}

----- EDITED -----




回答4:


you should rewrite an equals() method for your code, as you would a toString() method.



来源:https://stackoverflow.com/questions/14824113/why-these-two-java-objects-do-not-equals

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!