簡體   English   中英

Tricky Java:if條件中的布爾賦值

[英]Tricky Java: boolean assignment in if condition

我正在努力為OCA Java認證做好准備,並陷入了一些在if條件下處理任務的問題。 誰能解釋一下下面代碼中不同行為的原因? 根據我的觀點,我只是將相同的兩個布爾值放在“包含或”條件下6次......

package pck;

 class SuperMain{
    boolean b;
    public static void main(String args[]){
        new SuperMain();
    }
    SuperMain(){
        if(_true()|_false())
            System.out.println(b); //1 - prints false
        if(b=true|_false())
            System.out.println(b); //2 - prints true
        if(_true()|(b=false))
            System.out.println(b); //3 - prints false
        if((b=true)|_false())
            System.out.println(b); //4 - prints false
        if(b=true|(b=false))
            System.out.println(b); //5 - prints true
        if((b=true)|(b=false))
            System.out.println(b); //6 - prints false
    }
    boolean _true(){return b=true;}
    boolean _false(){return b=false;}
}

區別在於優先權 | 具有更高的優先級(“綁定更嚴格”)而不是=

所以這:

if(b=true|_false())

有效地:

if (b = (true | _false()))
    ...

同樣如此:

if(b=true|(b=false))

有效地:

if (b = (true | (b = false))

在這些情況下,的分配falseb發生的分配之前 trueb ...所以b最終被true 在所有其他情況下,分配以相反的順序發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM