关于 Java 8 (OCA) 中短路运算符和 post-fix 递增的问题

Question concerning short-cirquit operators and post-fix incrementation in Java 8 (OCA)

我正在学习我的 OCA 认证并找到这段代码并且想知道为什么下面代码的结果是“1, 2”而不是“1, 3”。

这里使用的'&'运算符不是short cirquit,后缀增量应用于第一个int,为什么不应用于第二个呢?

  int i = 0;
  int j = 1;
  if( (i++ == 0) & (j++ == 2) ){
     i = 12;
  }
  System.out.println(i+" "+j);

edit 学习期间休息很重要。我理解所涉及的概念,但疲劳让我犯了一个逻辑错误,这让我假设 j 开始时是 2

为什么 jifj++ == 2 中仅递增一次时 3。最初 j 初始化为 1,然后应用 ++ 运算符将其递增为 2

++ 运算符本质上是在执行 j = j + 1,并且由于您使用了逻辑 AND 运算符 &,因此对第一个条件和第二个条件都进行了评估。

注意:如果第一个条件被评估为 false,第二个条件将被评估为 & 是逻辑 AND 运算符而不是短路的条件 && 运算符。

javase specs 中描述的逻辑运算符。

正如@Marvin 在评论中指出的那样,j++ = j + 1 = 1 + 1 = 2。

在学习 OCA 认证时定期休息很重要 :)