Java三元运算符和后缀/前缀操作
我想了解这些代码的行为: 如果我们使用前缀增量:Java三元运算符和后缀/前缀操作,java,Java,我想了解这些代码的行为: 如果我们使用前缀增量: public class Ternary{ public static void main(String[] args){ int k=0; for(int i=0; i<10; i++){ k = (k < 3) ? ++k : 0; System.out.println(k); } } } public class Ternary{
public class Ternary{
public static void main(String[] args){
int k=0;
for(int i=0; i<10; i++){
k = (k < 3) ? ++k : 0;
System.out.println(k);
}
}
}
public class Ternary{
public static void main(String[] args){
int k=0;
for(int i=0; i<10; i++){
k = (k < 3) ? k++ : 0;
System.out.println(k);
}
}
}
公共类{
公共静态void main(字符串[]args){
int k=0;
对于(int i=0;i
首先解释,然后使用值
k++
首先使用,然后增加值
那么在第二种情况下,你是说
k = k++;
这不会有效地改变k的值
就我个人而言,我更喜欢这样:
k = (k < 3) ? k + 1 : 0;
k=(k<3)?k+1:0;
因为你真的不想增加k,然后给k这个值,这没有多大意义
也许可以看到一个更详细的解释k++;
只是指k=k+1;
++k
表示增量,然后将新值分配给k
k=(k<3)++k:0;
第一句话的意思是:
增量k
评价(k<3)?(新k):0
将步骤2)的结果保存到k中
k=(k<3)?k++:0;
第二句话的意思是:
评价(k<3)?(旧k):0
增量k
将步骤1)的结果保存在k中(覆盖步骤2的值)
您试图实现的目标最好是不将RHS的结果分配给k。++k
增量k
在评估之前,k++
取k
的值,然后再增加它的值。调试您的代码,您将更好地理解这一点,这与非常常见的问题没有什么不同关于Java中的k=k++;
的问题。增量是在赋值之前完成的,因此++
什么也不做。在前缀的情况下,在++之后执行赋值不会改变结果。建议:永远不要使用前缀/后缀增量/减量,除非将其用作单个独立表达式,如for(i=0;i
k = (k < 3) ? k + 1 : 0;
k = (k < 3) ? ++k : 0;
k = (k < 3) ? k++ : 0;