Tai*_*iga 3 java logic operators
我创建了一个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));
}
}
Run Code Online (Sandbox Code Playgroud)
这是第二个不起作用的例子.而不是返回false我得到nullpointerexception.
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是......两段代码之间的唯一区别在于我写的第一篇文章
rhs ==null ||...
Run Code Online (Sandbox Code Playgroud)
在第二部分中,它位于OR运算符的另一侧
...|| rhs==null
Run Code Online (Sandbox Code Playgroud)
为什么第一种情况不会给我一个Nullpointer但第二种情况呢?为什么要在OR运算符的哪一边写入布尔语句?
这很重要,因为||作为条件"OR"运算符,如果左表达式是true,则不会评估正确的表达式,因为结果已经可以确定.这被称为"短路"行为.
JLS第15.24节涵盖了这一点:
条件或运算符|| 运算符就像| (§15.22.2),但仅当其左侧操作数的值为false时才计算其右侧操作数.
右手表达式未被评估,因此NullPointerException避免了.
(&&条件"AND"运算符,也是"短路",如果左侧是,则仅评估右侧true.)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |