int i = 0; boolean t = true; boolean f = false, b; b = (t || ((i++) == 0)); b = (f || ((i+=2) > 0)); System.out.println(i);上述代碼執行后,打印結果是2,而不是3,為什么呢?我發現“b = (t || ((i++) == 0))”通過調試執行后“i”是0而不是1。好吧,我很困惑為什么“i++”不改變“i”。
1 回答

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
好吧,我很困惑為什么“i++”不改變“i”。
因為i++
不會在您提供的代碼中執行。
在 形式的表達式中a || b
,首先a
計算,如果它為真(在本例中就是這樣),b
?則不計算該表達式。這稱為短路。
JLS 第 15.24 節對此進行了描述。
如果您將代碼更改為使用非短路運算符|
,如下所示:
b?=?(t?|?((i++)?==?0));
...然后它將無論如何評估兩個操作數。
添加回答
舉報
0/150
提交
取消