为什么执行"boolean t = true,b; b = (t || ((i++) == 0))"后"i"的值没有变化

Why does the value of "i" not change after executing "boolean t = true,b; b = (t || ((i++) == 0))"

  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" 在 debuging.Well 执行 "b = (t || ((i++) == 0))" 之后是 0 而不是 1,我很困惑为什么 "i++" 没有改变 "i"。

Well,I'm confused why "i++" not changes "i".

因为i++没有在您提供的代码中执行。

a || b 形式的表达式中,首先计算 a,如果为真(在本例中为真),则表达式 b 评估。这被称为短路

这在 JLS section 15.24 中有描述。

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

b = (t | ((i++) == 0));

...然后它将计算两个操作数,而不管。