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);
}
我想知道对象 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);
}