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

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