Java 高进位运算符不';在while条件';s表情

Java 高进位运算符不';在while条件';s表情,java,while-loop,operators,Java,While Loop,Operators,请看下面的代码: 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

请看下面的代码:

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
首先求值。我错过了一些简单的东西吗?

是的,你说得对<代码>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
没错,
k--
>0
之前进行计算。但是,该评估的结果是
k
,而不是
k-1
,因为
--
是后期修复,而不是预修复


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

优先级与此无关。“k--”的值是“k”。后减“k”会产生副作用,但不会影响操作数值