为什么执行“ boolean t = true,b; b =(t ||((i ++)== 0))后,“ i”的值不改变

Wyn*_* Wu 2 java boolean-logic

  int i = 0;
  boolean t = true;
  boolean f = false, b;
  b = (t || ((i++) == 0));
  b = (f || ((i+=2) > 0));
  System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

执行上述代码后,打印结果为2,而不是3,为什么?

我发现在通过调试执行“ b =(t ||((i ++)== 0))”之后,“ i”是0而不是1。

Jon*_*eet 13

好吧,我很困惑为什么“ i ++”不更改“ i”。

因为i++不会在您提供的代码中执行。

在形式为的表达式中a || b,first a被求值,并且如果它是真的(在这种情况下是真的),b 则不对表达式求值。这称为短路

JLS第15.24节对此进行了描述。

如果您更改代码以改为使用非短路|运算符,如下所示:

b = (t | ((i++) == 0));
Run Code Online (Sandbox Code Playgroud)

...然后它将对两个操作数进行求值。