2014-12-02 159 views
-3

Java如何用邏輯運算符編譯或計算以下代碼? 哪對先執行?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

「Java編譯器如何評估以下內容」是什麼意思? – Maroun 2014-12-02 12:38:50

+3

以下是運算符優先級表:http://www.cs.bilkent.edu.tr/~guvenir/courses/CS101/op_precedence.html – 2014-12-02 12:40:31

+0

Java如何執行代碼?哪一個具有最高優先級? &&或|| ?以及Java如何執行它? – user3545953 2014-12-02 12:41:25

回答

2

&&優先於||。改寫成只需要括號:

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()) { 
    // ... 
} 
+0

這兩個&&先執行,然後||在語句塊中執行? – user3545953 2014-12-02 13:04:25

+0

@ user3545953它按我提供的順序執行。 – sp00m 2014-12-02 13:22:58

+0

聲明中的|| .. Java如何考慮它? – user3545953 2014-12-02 15:13:33