equals Object类的方法 - 它是如何工作的 - Java

时间:2015-11-18 04:10:44

标签: java object equals

我想知道Object类中的equals方法是如何工作的。这是该方法的实现。

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

明显的是equals方法正在使用==。 所以,现在当我比较两个对象a和b时,如果a恰好为null,则不会抛出任何异常。但a.equals(b),抛出NPE,为什么?

3 个答案:

答案 0 :(得分:1)

当你在null对象上调用方法时,它甚至不会调用该方法,但会在同一个移动中给出null指针错误。 同样适用于equals。

调用a.equals(b);

当你在a上调用equals时,它将给出空指针异常。

例如,如果您创建方法空白。

public Class MyClass{
    public voidblank() {

    }
}

现在即使你在null对象上调用空白它也会给你空指针,与方法实现无关。

MyClass a = null;
a.blank();

这也会将空指针指定为null。

答案 1 :(得分:1)

  

但是a.equals(b),为什么会抛出NPE?

因为您无法在null上调用方法(方法由Java中的referene变量调用)。如果a为空,则无法调用equals取消引用)。所有Object(非原始)Java变量类型都可以包含引用的值(或null,其中定义不是值)。这就是为什么Java(通过值传递)具有通过引用传递的功能。 Object(s)的值为引用。

答案 2 :(得分:0)

a.equals(b)抛出空指针异常,因为a为null,所以当你尝试在null对象上调用实例方法时,它会给出一个空指针异常。有关更多信息,请参阅以下文档以获取空指针异常。 http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html

对于这些类型的情况,您应首先检查a是否为null,然后应该在此对象上使用该方法。

if(a != null) {
    a.equals(b);
}