[英]Java post increment and pre increment
Java中的以下代碼:
int a = 0, b = 0, c = 0;
boolean d = (a++ > 0 && b-- < 0) || --c < 0;
結果值:
a = 1, b = 0, c = -1 and d = true
我不明白為什么a
= 1,因為它是一個后增量,也應該像b值一樣做出反應。 另外,如果我將b--
更改為--b
它仍然對b的值沒有影響。
理解這種邏輯的最佳方法是什么?
a++ > 0
返回false,因為a++
返回a
(0)的先前值。
因此,根本不評估b-- < 0
,因為&&
是短路操作符。 僅當左操作數為true
時才評估右操作數。
由於||
的第一個操作數,因此評估--c < 0
operator為false
,因此必須計算第二個操作數。
后d
進行評價時,的值a
是1
,因為a
被遞增。 b
保持為0
,因為b--
沒有被執行。 由於--c
被執行, c
為-1
。 並且d
是true
因為--c < 0
是true
。
比較時a++
不是>0
,因此b
部分不被評估,也不會遞增。
&&
和||
第二部分 如果無法更改結果,則不評估表達式。 對於&&
first false
確定結果為false
。
類似地,first true
確定||
結果 (但不是這里)
在表達式運行之后,然后a將確實為1,因為后增量運算符隨后被執行。
在表達式的評估期間,就表達式而言,a為0(但是對於其他代碼,a現在為1),因此邏輯OR的第一部分,即邏輯AND,被評估為false而b post減量沒有得到評估。
邏輯的第二部分或然后運行,並且預遞減執行以將c減少到-1,然后使得比較評估為真,因此d為真。
展開不同的子句以分隔變量並運行調試器,以便對正在發生的事情進行更具交互性的解釋。
當你寫一個++ OR b--時,它傳遞值'a'和'b'當前成立,然后修改變量。
所以你的表達很簡單,
boolean d = (0 > 0 && 0 < 0) || -1 < 0;
現在在評估時,(0> 0 && 0 <0) - >第一個表達式返回false並且您使用了短路AND運算符。 如果沒有必要,意義不評估右側。 由於&&的LHS返回false,因此不會評估b--。
而且我們'是'是真的。 記得,
表達式中的后遞增 - >首先分配當前值,稍后修改。
表達式中的預增量 - >先修改,稍后再分配更新的值。
請參考此鏈接以更好地了解短路操作器: 短路說明
a ++有效地表示a = a + 1因此,a(= 0)的現有值用於評估表達式,稍后a的值遞增。 所以,a變為1。
關於為什么b = 0以及為什么-b與b--具有相同的效果,b的值由於&&而不變。 由於不滿足++> 0,因此不評估下一個表達式b-- <0,並且b的值保持為0. &&在表達式求值為false時停止求值,而|| 一旦語句評估為false,就停止評估。
請執行此代碼..
int a = 0, b = 0, c = 0;
System.out.println("b = " + --b);
b=0;
System.out.println("b = " + b--);
System.out.println("a = " + a++);
a=0;
System.out.println("a = " + ++a);
System.out.println("c = " + c--);
c=0;
System.out.println("c = " + --c);
a=b=c=0;
boolean d = (a++ > 0 && --b < 0) || --c < 0;
System.out.println("d = " + d);
我認為你理解完整的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.