“==”vs“equal(Object obj)”

时间:2012-01-01 18:53:07

标签: java

我可以通过以下方式了解==object.equal(Object obj)之间的差异吗? :

如果两个对象的相同,那么object.equal(Object obj)会返回true。如果两个对象的类型相同,则==会返回true

4 个答案:

答案 0 :(得分:5)

如果引用完全相同,

==将返回true。

当写入方法返回true时,

equals(Object)返回true。这可以是同一个对象,一个等价的对象,也可以是开发人员想写的东西。

默认实现写为

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

所以你可以看到它做同样的事情。

答案 1 :(得分:2)

java.lang.Object.equals==的默认行为是,如果引用a和b都指向同一个对象,则返回true;否则就是假的。

如果您想比较值,则必须覆盖等于。这是String以及其他一些类型所做的事情。你不能免费获得它;你必须从java.lang.Object覆盖方法。

最好阅读Joshua Bloch" Effective Java" chapter 3了解如何正确完成。

答案 2 :(得分:0)

当对象根据对象的属性相同时,

object.equals(Object obj)返回true,具体取决于对象的类型以及是否已实现该方法。

当对象的实例相同时,

==返回true

答案 3 :(得分:0)

Object.equals的实现是:

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

仅当trueobj完全相同时,才会返回this。就像Peter Lawrey在他的回答中所说,equals对任何其他类的定义完全取决于它是如何编码的。甚至没有要求两个对象是同一个类,甚至是层次相关的类。

请注意,定义equals而不定义hashcode通常被视为不良做法。需要两个equal对象必须返回相同的哈希码。