繁体   English   中英

等于Object类的方法-它如何工作-Java

[英]equals method of Object class - how it works - Java

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

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

显然等于方法使用== 因此,现在当我比较两个对象a和b时,如果a恰好为空,则不会引发任何异常。 但是a.equals(b)抛出NPE,为什么呢?

当您在null对象上调用方法时,它甚至不调用该方法,但是在相同的移动上给出null指针错误。 同样适用于平等。

当调用a.equals(b)

当您在null上调用equals时,它将给出null指针异常。

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

public Class MyClass{
    public voidblank() {

    }
}

现在,即使您在null对象上调用blank,它也会为您提供null指针,与方法实现无关。

MyClass a = null;
a.blank();

由于a为null,因此也会提供null指针。

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

因为您不能在null上调用方法(方法由Java中的Referene变量调用)。 a为null时,根本没有什么可以调用equals取消引用)。 Object (非原始)Java变量类型可以保留的所有内容是引用的值(或null ,根据定义 ,它不是值)。 这就是Java(按值传递)具有按引用传递功能的原因。 Object的值引用。

a.equals(b)会引发空指针异常,因为a为空,因此当您尝试在空对象上调用实例方法时,它将给出一个空指针异常。 有关更多信息,请参见下面的文档以了解空指针异常。 http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM