首页 > 解决方案 > Java 后增量变量可用性

问题描述

我哥哥正在上 Java 课。我对 Java 不是很熟悉,但我知道 C#。我试图解释为什么下面的代码返回 3,5,7,9 而不是 1,3,5,7,9。我说 i 的新(递增)值在 i 递增的行中不可用,因此当 i 为 1 时不满足 if 条件。我不确定我是否解释得很好,所以我希望也许有人可以给出更好的解释。为什么代码返回 3,5,7,9 而不是 1,3,5,7,9?

  int i = 1;
  while (i < 10)
    if ((i++) % 2 == 0)
    System.out.println(i);

真的是索提里奥斯???这是重复的?这个问题与其他问题不同,因为这个问题包含一个循环。此外,增量发生在 if 语句中。我承认另一个问题在上下文中信息丰富且相似,但这并不意味着重复。刚接触 Java 的人可以从这个问题中学习,而不是从另一个问题中学习(反之亦然)。有时感觉重复问题的标准似乎是任意的。

标签: java

解决方案


答案是因为 when i = 1, i++ % 2 == 0return false,所以什么都没有打印。这是因为1 % 2 == 1,不是0

i表达式 中的in 在递增(i++) % 2 == 0之前使用。i

所以什么时候i是2,i++ % 2 == 0是真的。但在那之后,i已经增加到 3,所以它打印 3。

i它以这种方式继续,在 增加之前为 时评估为真even

这是一个更简单的例子。

      int k = 0;
      if (k++ == 0) {
         System.out.println(k); // print 1
      }

另一方面,如果它是预先递增的,它将像这样工作。

  int k = 0;
  if (++k == 1) {
     System.out.println(k); // print 1
  }

请注意以下事项:

int i = 1;
System.out.println(i++ == i);  //Prints false

这是因为表达式的计算结果是1 == 2因为首先使用 的预增量值,i然后将增量值用于比较的目标。感谢 Carlos Heuberger 指出这一点。


推荐阅读