【问题标题】:What's the difference between i++ vs i=i+1 in an if statement? [duplicate]if 语句中的 i++ 与 i=i+1 有什么区别? [复制]
【发布时间】: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


【解决方案1】:

如果使用i++,则使用旧值进行计算,之后i的值将加1。

对于i = i + 1,情况正好相反:它会先递增,然后才会进行计算。

如果您想在第一种情况下的行为简洁,请使用++i:在这种情况下,i 将在计算之前先递增。

更多细节和更多技术解释,请查看docs for Assignment, Arithmetic, and Unary Operators

【讨论】:

  • 其中i++ 也称为后缀增量 :)
【解决方案2】:

i = i+1会增加i的值,然后返回增加的值。

i++ 将增加 i 的值,但返回 i 在增加之前持有的原始值。

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 2017-05-17
    • 2013-05-22
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多