Ste*_*ano 58 java evaluation logic boolean operator-precedence
我们来看一个对象的简单例子Cat
.我想确定"not null" cat
是橙色还是灰色.
if(cat != null && cat.getColor() == "orange" || cat.getColor() == "grey") {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我相信AND先来,然后是OR.我有点模糊,所以这是我的问题:
有人可以引导我完成这个陈述,所以我确定我会得到什么?
另外,如果我添加括号会发生什么; 这会改变运营的顺序吗?
我的操作顺序会因语言而异吗?
Tre*_*ner 20
布尔运算顺序(我相信所有语言):
所以你上面的逻辑相当于:
(cat != null && cat.getColor() == "orange") || cat.getColor() == "grey"
Run Code Online (Sandbox Code Playgroud)
表达式基本相同:
if ( (cat != null && cat.getColor() == "orange") || cat.getColor() == "grey") {
...
}
Run Code Online (Sandbox Code Playgroud)
这里的优先顺序是AND(&&
)的优先级高于OR(||
).
您还应该知道,使用==
测试字符串相等性有时可以在Java中工作,但这不是您应该如何操作的.你应该做:
if (cat != null && ("orange".equals(cat.getColor()) || "grey".equals(cat.getColor()))) {
...
}
Run Code Online (Sandbox Code Playgroud)
即使用equals()
方法进行String
比较,==
而不仅仅是参考相等.字符串的引用相等可能会产生误导.例如:
String a = new String("hello");
String b = new String("hello");
System.out.println(a == b); // false
Run Code Online (Sandbox Code Playgroud)
首先,您的 if 语句包含三个主要表达式:
第一个表达式只是检查 cat 是否不为空。这是必要的,否则第二个表达式将被执行并导致NPE(null pointer excpetion)
. 这就是为什么在第一个和第二个表达式之间使用 && 的原因。使用时&&
,如果第一个表达式的计算结果为 false,则永远不会执行第二个表达式。最后检查猫的颜色是否为灰色。
最后请注意,您的 if 语句仍然是错误的,因为如果 cat 为空,则仍会执行第三个表达式,因此您会收到空指针异常。
正确的做法是:
if(cat != null && (cat.getColor() == "orange" || cat.getColor() == "grey")) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
检查括号的顺序。
&&
肯定是评价过呀||
。但是我看到您正在做的事情cat.getColor() == "orange"
可能会给您带来意想不到的结果。你可能想要这个:
if(cat != null && ("orange".equals(cat.getColor()) || "grey".equals(cat.getColor()))) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56947 次 |
最近记录: |