【问题标题】:Higher precendence operator doesn't get evaluated first in while condition's expression高优先级运算符不会在 while 条件表达式中首先被评估
【发布时间】:2012-12-03 05:52:05
【问题描述】:

看看下面的代码:

class experiment{
    public static void main(String[] args) {
        int k = 3;

        while (k-- > 0) {
            System.out.println(k + "\n");
        }
    }
}

预期输出:

2
1

实际输出:

2
1
0

后缀运算符的优先级高于操作运算符。因此,k-- 应该在 k > 0 之前首先被评估,但是查看输出,k > 0 首先被评估。我在这里错过了一些简单的事情吗?

【问题讨论】:

    标签: java while-loop operators


    【解决方案1】:

    优先级与它无关。 “k--”的值是“k”。后减 'k' 有一个副作用,但它不会影响操作数的值。

    【讨论】:

      【解决方案2】:

      是的,你是对的。 k-- 将首先被评估。但它确实被评估为k。并且在涉及它的当前操作完成后,它的价值就会增加。因此,首先使用当前值,然后发生增量。

      如果你使用--k,你会得到预期的输出。

      试试这些例子,你就会明白:-

      int k = 4;
      System.out.println(k-- + " : " + k);  // prints 4 : 3
      
      int x = 5;
      System.out.println(--x + " : " + x);  // prints 4 : 4
      

      【讨论】:

        【解决方案3】:

        你是对的,k--> 0 之前被评估。但是,该评估的结果是 k,而不是 k - 1,因为 -- 是后修复,而不是前修复。

        所以,> 第一次被求值时,它实际上是 3 > 0,因为虽然 k 现在是 2,但 表达式 k-- 的结果是 @ 987654331@。但是,当打印出现时,k = 2,因此首先输出2。这就是为什么您获得的迭代次数比(我猜)您预期的要多。

        【讨论】:

          猜你喜欢
          • 2011-07-24
          • 2016-12-31
          • 1970-01-01
          • 2022-11-01
          • 2021-10-04
          • 2020-06-23
          • 2020-08-22
          • 2017-10-25
          • 2016-08-20
          相关资源
          最近更新 更多