【问题标题】:In Java, when exactly does the post-increment operation occur?在Java中,后自增操作究竟是什么时候发生的?
【发布时间】:2014-03-22 08:47:07
【问题描述】:

我正在查看这段 Java 代码:

        while (n-- != 0) {
            if (searchMe.charAt(j++) != substring.charAt(k++)) {
                continue test;
            }
        }

我对@9​​87654322@ 操作发生的确切时间感到困惑。是在if 语句之后吗?

【问题讨论】:

  • 没有“if循环”这样的东西。
  • @ubiquibacon - 是的 ;-) 好的,谢谢

标签: java jvm operators post-increment


【解决方案1】:

n-- 操作在每次评估 while 条件时发生;特别是在评估 != 运算符的左侧时。它与if 声明无关。 while 条件在每次循环迭代开始时进行评估;如果它的计算结果为true,则执行while 循环的主体(if 语句),但那是在n-- 操作完成之后。 (当然,还有下一个循环迭代。)

【讨论】:

    【解决方案2】:

    第一次运行while循环时,检查n的值是否不等于0(因为它是后减量)。

    一旦条件被评估,即在它进入 while 循环之后,n 的值将减一(n-1)。这个新值将在特定迭代的 while 循环中使用。

    下一次迭代,当while循环检查条件时,检查值(n-1)是否等于0,依此类推。

    【讨论】:

    • 实际上,当while循环测试被评估时,无论是否进入循环,n的值都会递减。因此,例如,如果 n == 0 在首次运行 while 循环时,那么 nwhile 循环之后的语句中将是 -1
    • 是的,我同意泰德霍普的观点。 :)
    【解决方案3】:

    --++ 运算符如果放在操作数之后,将在包含它的语句完成后发生。如果放在操作数之前,那么它将发生在该语句之前。

    在这种情况下,语句是while,所以它会在它之后发生,这意味着在while 语句中的条件评估之后。

    【讨论】:

    • 在计算运算符时发生递增或递减,这可能发生在语句完成之前。因此,像a[i++] = a[i] 这样的语句会将一个元素复制到数组a 的前一个元素中。 (也就是说,当评估右侧 -- a[i] -- 时,i 的值是通过评估 array access expression a[i++]在作业的左侧。)
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2012-10-01
    • 2021-02-07
    • 2020-05-28
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多