[英]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))
在這些情況下,的分配false
以b
發生的分配之前 true
到b
...所以b
最終被true
。 在所有其他情況下,分配以相反的順序發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.