equals 对象的方法 class - 它是如何工作的 - Java

equals method of Object class - how it works - Java

我想知道对象 class 中的 equals 方法是如何工作的。这是方法的实现。

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

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

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

调用时a.equals(b);

当你在一个为空的 a 上调​​用 equals 时,它会给出空指针异常。

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

public Class MyClass{
    public voidblank() {

    }
}

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

MyClass a = null;
a.blank();

这也会给出空指针,因为 a 为空。

But a.equals(b), why does it throw NPE?

因为你不能调用null上的方法(方法是由Java中的referene变量调用的)。当 a 为 null 时,根本没有什么可以调用 equals 取消引用)。所有 Object(非原始)Java 变量类型可以保存的是引用的值(或 null,根据 定义 不是一个值)。这就是为什么Java(按值传递)具有按引用传递的功能。 Object(s)的值是个引用。

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

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

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