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,为什么?
我发现"i"在"b = (t ||((i++( == 0(("通过调试执行。好吧,我很困惑为什么"i++"不改变"i"。
好吧,我很困惑为什么"i++"不改变"i"。
因为i++
不会在您提供的代码中执行。
在形式为a || b
的表达式中,首先计算a
,如果为 true(在本例中为真(,则不计算表达式b
。这称为短路。
JLS 第 15.24 节对此进行了描述。
如果将代码更改为使用非短路|
运算符,如下所示:
b = (t | ((i++) == 0));
。然后,无论如何,它都会评估这两个操作数。