【发布时间】:2015-05-16 21:38:13
【问题描述】:
对于第一个代码,
int i = 1;
while (i < 10)
if ((i++) % 2 == 0)
System.out.println(i);
系统输出:3 5 7 9
对于第二个代码,
int i = 1;
while (i < 10)
if ((i=i+1) % 2 == 0)
System.out.println(i);
系统输出:2 4 6 8 10
为什么两个输出不同,但公式相同?
【问题讨论】:
-
天哪,这是我在大学里的第一个作业..
-
不完全一样,
i++和++i实际上都是关于后缀和前缀递增的。尽管i=i+1是++i的前缀等价物,但并不相同。仅等效而不相同的论点很简单,i=i+5每次迭代我可以添加 5,++i我不能。 -
@byako 我不是骗子的原因是因为你链接的简单问题是后置前缀增量有什么区别。这个问题提供了一个示例,它为 OP 提供了一个 unexpected 结果,这对我来说显然意味着速记前缀
++i没有被标识为i=i+1。同样,前缀增量++i的唯一可编码解释又是i=i+1,以使其在视觉上易于理解。 -
@dbf 很公平。我已经删除了我之前的评论。
-
不言而喻,任何 j++ 和 ++j 之间的区别很重要的代码都会自动成为坏代码(在等式中使用 j=j+1 会超出坏代码)。一旦你添加了多行无括号 if,两者都成为“不该做什么”的例子
标签: java if-statement