java - 为什么java语句评估会发生这样的情况?

标签 java post-increment pre-increment

int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);

输出将是:

false
true

我不明白为什么,请向我解释一下。

最佳答案

Operands of == are evaluated left to right ,并且 ++ 具有更高的优先级,因此您的代码相当于:

int z = 1;
int tmp1 = z++; //tmp1 = 1 / z = 2
int tmp2 = ++z; //tmp2 = 3 / z = 3
System.out.println(tmp1 == tmp2);

tmp1 = ++z; //tmp1 = 4 / z = 4
tmp2 = z++; //tmp2 = 4 / z = 5
System.out.println(tmp1 == tmp2);

我假设您了解 z++++z 之间的区别:

  • tmp1 = z++; 可以分解为:tmp1 = z; z = z + 1;
  • tmp2 =++z;可以分解为:z = z + 1; tmp2 = z;

关于java - 为什么java语句评估会发生这样的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12036481/

相关文章:

java - 来自内部存储的电子邮件

java - @Formula 从 spring data jpa 中的 @OneToMany 关联中计数对象

javascript - 更新值不会在 Javascript 中递增

c++ - 你能在c中的同一个语句中的同一个变量上有一个递增器和一个递减器吗

java -++Var和Var++的区别

javadoc - Java:如何将 JDK 类(例如 javax.*)添加到自定义 JavaDoc 索引中?

java - 如何更改 azure-functions-maven-plugin 的日志记录级别?

java - 为什么在 while 循环中递增 int 原语不会永远循环

c - C 中的 i++ 和++i 之间有性能差异吗?

c - 为什么第一个赋值的是str1[0]呢?不应该是 str1[1] 吗?