1

看看下面的代码:

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首先评估。我在这里想念一些简单的东西吗?

4

3 回答 3

1

嗯你是对的。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
于 2012-12-03T05:54:39.723 回答
1

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

因此,第一次>计算 时,它是有效3 > 0的,因为虽然k现在是2,但表达式 k--的结果是3。但是,当打印出现时,k = 2, 因此2首先输出。这就是为什么您获得的迭代次数比(我猜)您预期的要多。

于 2012-12-03T05:54:46.817 回答
1

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

于 2012-12-03T06:04:30.493 回答