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”会产生副作用,但不会影响操作数值