我想知道Object类中的equals方法是如何工作的。这是该方法的实现。
public boolean equals(Object obj) {
return (this == obj);
}
明显的是equals方法正在使用==
。
所以,现在当我比较两个对象a和b时,如果a恰好为null,则不会抛出任何异常。但a.equals(b)
,抛出NPE,为什么?
答案 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);
}