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
提交
取消