簡體   English   中英

Java post增量和pre增量

[英]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進行評價時,的值a1 ,因為a被遞增。 b保持為0 ,因為b--沒有被執行。 由於--c被執行, c-1 並且dtrue因為--c < 0true

比較時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.

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