Why these two Java objects do not equals?

2019-07-25 11:53发布

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?

标签: java equals
4条回答
神经病院院长
2楼-- · 2019-07-25 12:01

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

查看更多
\"骚年 ilove
3楼-- · 2019-07-25 12:12

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.

查看更多
三岁会撩人
4楼-- · 2019-07-25 12:20

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

查看更多
SAY GOODBYE
5楼-- · 2019-07-25 12:24

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 -----

查看更多
登录 后发表回答