【问题标题】:Pre and postincrement java evaluation前后增量Java评估
【发布时间】:2011-05-11 08:17:20
【问题描述】:

你能逐步解释一下java是如何评估的吗

1) y 的值?

诠释 x = 5; int y = x-- % x++;

2) 在这种情况下 y 的值?

诠释 x = 5; int y = x-- * 3 / --x;

【问题讨论】:

  • 重复? infinite loopX-- X++
  • 关于前/后增量评估的问题太多了!
  • 除非你是编译器编写者,否则你不需要知道。没有充分的理由编写使用 ++ 和 -- 的代码。

标签: java


【解决方案1】:

好吧,操作数是从左到右计算的,在每种情况下,后缀操作的结果都是变量在递增/递减之前的值,而前缀操作是变量的值之后递增/递减......所以你的情况看起来像这样:

案例一:

int x = 5;
int tmp1 = x--; // tmp1=5, x=4
int tmp2 = x++; // tmp2=4, x=5
int y = tmp1 % tmp2; // y=1

案例 2:

int x = 5;
int tmp1 = x--; // tmp1=5, x=4
int tmp2 = 3;
int tmp3 = --x; // tmp3=3, x=3
int y = tmp1 * tmp2 / tmp3; // y = 5

就我个人而言,我通常会尽量避免在较大的表达式中使用前/后增量表达式,并且我当然会避免使用这样的代码。我发现将副作用表达式放在单独的语句中几乎总是更清楚。

【讨论】:

  • 你的解释是正确的。但是,如果您复制并粘贴 EugeneP 的问题,y 在案例 1 和案例 2 中是否具有与您相同的值?在一行中进行前后递减通常不被认为是一种好的做法,而且我现在还没有 Java 编译器来检查结果:-/
  • @darioo:是的,它确实给出了相同的答案。我同意这不是一个好主意 - 将编辑提及这一点。
  • 解释完美!当然,是的,结果绝对正确且可预测。
【解决方案2】:

我不确定 java,但在 C 中它演变成未定义的行为。

【讨论】:

  • 在 Java 中,行为是明确定义且可移植的。
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2017-04-18
  • 2018-09-13
  • 1970-01-01
  • 2014-11-07
相关资源
最近更新 更多