i == (i = 2) 的结果是什么?
i == (i = 2) 的结果是什么?
运行以下代码:
// 在Java中,输出##### public static void main(String[] args) { int i = 1; if(i == (i = 2)) { System.out.println("@@@@@"); } else { System.out.println("#####"); } }
但是:
// 在C中,输出@@@@@,我在Clion(GCC 7.3)和Visual Studio 2017上测试过 int main(int argc, char *argv[]) { int i = 1; if(i == (i = 2)) { printf("@@@@@"); } else { printf("#####"); } return 0; }
提出这个问题的动机来自以下代码:
// 代码来自JDK 11 - java.util.concurrent.atomic.AtomicInteger // 我对变量prev的行为很好奇。 public final int getAndUpdate(IntUnaryOperator updateFunction) { int prev = get(), next = 0; for (boolean haveNext = false;;) { if (!haveNext) next = updateFunction.applyAsInt(prev); if (weakCompareAndSetVolatile(prev, next)) return prev; haveNext = (prev == (prev = get())); } }
那么,如何解释上述两种不同的执行模式呢?