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

时间:2019-10-12 11:11:48

标签: 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);

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

我发现在通过调试执行“ b =(t ||((i ++)== 0))”之后,“ i”不是0,而是1。我很困惑为什么“ i ++”不更改“ i”。

1 个答案:

答案 0 :(得分:13)

  

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

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

在形式为a || b的表达式中,首先求值a,如果它是真的(在这种情况下是真的),则表达式b 不是进行了评估。这称为短路

这在JLS section 15.24中有描述。

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

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

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