【发布时间】:2014-07-07 16:33:14
【问题描述】:
我创建了一个 equals 方法。我相信我可以通过两种方式做到这一点,但 java 似乎并不同意。这是我知道的第一个有效的示例。
public class HelloWorld {
public boolean equals(Object rhs){
if(this==rhs){
return true;
}else if( rhs==null || this.getClass() != rhs.getClass()){
return false;
}else{
HelloWorld tmp =(HelloWorld)rhs;
return true;
}
}
public static void main(String[] args){
HelloWorld c = new HelloWorld();
System.out.println(c.equals(null));
}
}
这是第二个不起作用的例子。而不是返回 false 我得到一个空指针异常。
public class HelloWorld {
public boolean equals(Object rhs){
if(this==rhs){
return true;
}else if(this.getClass() != rhs.getClass() || rhs==null){
return false;
}else{
HelloWorld tmp =(HelloWorld)rhs;
return true;
}
}
public static void main(String[] args){
HelloWorld c = new HelloWorld();
System.out.println(c.equals(null));
}
}
那么我的问题......这两段代码之间的唯一区别是我写的第一段代码
rhs ==null ||...
在第二部分中,它位于 OR 运算符的另一边
...|| rhs==null
为什么第一种情况不会给我一个 Nullpointer 而第二种情况呢?为什么我在 OR 运算符的哪一边写布尔语句很重要?
【问题讨论】: