2015-01-03 60 views
-1

運行以下代碼後,輸出將打印:false。所以我假設i1==i2之前評估b1 = i1。但是,順序是不是從左到右?=和==首先得到評估?

public static void main(String[] args) { 
    boolean b1; 
    int i1 = 2; 
    int i2 = 3; 

    if(b1 = i1==i2) { 
     System.out.println("true"); 
    } else { 
     System.out.println("false"); 
    } 
} 
+0

首先它將值放入b1中,然後檢查值是true還是false。 在這種情況下,2!= 3所以'b1'的值是'假' – roeygol

+0

看起來像它檢查i1 == i2是假的,然後檢查b1和(i1 == i2)這意味着b1 = false,因此它打印「false 「 – OPK

+0

如果你沒有把任務放在裏面,如果你永遠不需要記住它的優先級。如果你不能記住一個操作符的優先級,最好把它放在大括號中。 – eckes

回答

8

退房運算符優先級:之前=

+0

是的,這似乎是正確的,並且可以解釋爲b1將被分配條件的值(i1等於i2),所以==運算符必須在賦值之前先被評估。 – hasan

0

最簡單的解釋是這樣的:

當交易在賦值的情況下,評估等號側的右側側,然後將其分配給左側側。

當然,布爾表達式中的典型賦值限制了可讀性。更好的做法是在以前,如果要分配b1 = i1 == i2,把if (b1) {...}或讓在if (i1 == i2) {...}

0

沒有完全擺脫B1,它是根據operator precedence,這使===之前評估。

有關'從左到右'的說法適用於二元運算符的操作數:左邊的操作數在右邊的操作數之前求值。也是參數列表。