Java如何使用逻辑运算符编译或评估以下代码? 首先执行哪一对?
else if ((((assign/50)>=0.8) && (((exam/100)<=0.35) || ((exam/100)>=0.4))) ||
(((exam/100)>=0.8) && (((assign/50)<=0.35) || ((assign/50)>=0.4)))) {
System.out.println("Pushed Up");
答案 0 :(得分:2)
&&
优先于||
。只用必要的parens重写:
assign / 50 >= 0.8 && (exam / 100 <= 0.35 || exam / 100 >= 0.4)
|| exam / 100 >= 0.8 && (assign / 50 <= 0.35 || assign / 50 >= 0.4)
在Java中(与许多其他语言一样),&&
和||
为short-circuit operators。简单来说:
1. evaluate "assign / 50 >= 0.8"
2. if true
3. evalute "exam / 100 <= 0.35"
4. if true
5. return true
6. else
7. evaluate "exam / 100 >= 0.4"
8. if true
9. return true
10. else
11. goto 13.
12. else
13. evaluate "exam / 100 >= 0.8"
14. if true
15. evaluate "assign / 50 <= 0.35"
16. if true
17. return true
18. else
19. evaluate "assign / 50 >= 0.4"
20. if true
21. return true
22. else
23. return false
24. else
25. return false
这可能非常有用。例如,NPE永远不会被抛出在以下片段中:
if (myString != null && !myString.isEmpty()) {
// ...
}