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”。
答案 0 :(得分:13)
好吧,我很困惑为什么“ i ++”不更改“ i”。
因为i++
不在您提供的代码中执行。
在形式为a || b
的表达式中,首先求值a
,如果它是真的(在这种情况下是真的),则表达式b
不是进行了评估。这称为短路。
这在JLS section 15.24中有描述。
如果您更改代码以改为使用非短路|
运算符,如下所示:
b = (t | ((i++) == 0));
...然后它将对两个操作数进行求值。