[英]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.