2013-07-28 69 views
1

我在理解Java中短路運算符的優先級方面遇到困難。根據短路行爲,表達式「true || true」的右邊部分在這裏應該不重要,因爲一旦「& &」條件的第一部分被評估爲「假」,表達式的其餘部分應該具有未被評估。爲什麼下面的表達式返回true?

但是,當執行下面的一段代碼時,我看到聲明爲「true」的結果。有人可以向我解釋這一點嗎?

public class ExpressionTest{ 
     public static void main(String[] args) { 
     boolean result1 = false && true || true; 
     System.out.println(result1); 
     } 
    } 

回答

4

在運營商處檢查此tutorial。該表清楚地表明,&&||具有更高的優先級。

(false && true) || true; 

休息我想你可以在自己的評價:作爲

所以,

false && true || true; 

進行評估。在同一行上

+0

感謝您的答覆!我現在明白爲什麼表達評估爲「真實」。但是,爲什麼編譯器選擇評估策略爲(false && true)||真正。相反,在「&&」運算符之前看到「false」後,它可能會忽略聲明的其餘部分? – sunsin1985

+0

@ sunsin1985。 Java從左向右評估表達式。就是這樣。 –

+0

謝謝!這解釋給我。 – sunsin1985

4

The JAVA turorial

運算符具有相同的優先級。當 等號優先級的運算符出現在同一個表達式中時,規則必須支配首先評估的 。除了 賦值操作符之外的所有二元運算符都從左到右進行求值;分配 操作符是從右到左

爲此,編譯器解析它作爲

boolean result1 = (false && true) || true; 

爲此,A || true回報true無論A價值。

要獲得理想的表達做如下:

boolean result1 = false && (true || true); 
+0

感謝您的回覆! Java教程現在對我來說很清楚,從左到右的評估是這裏的關鍵。 – sunsin1985

相關問題