我想了解该代码的行为:
如果我们使用前缀增量:
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);
}
}
}
输出是: 1 2 3 0 1 2 3 0 1 2
但如果使用后缀增量:
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);
}
}
}
输出是: 0 0 0 0 0 0 0 0 0 0
有什么区别以及为什么我们没有相同的输出?
答案 0 :(得分:5)
++k
首先解释,然后使用该值
k++
首先使用,然后增加值
所以在第二种情况下你说
k = k++;
并且这不会有效地改变k的值
我个人更喜欢这样的东西:
k = (k < 3) ? k + 1 : 0;
因为你真的不想增加k然后给k那个值,这没有多大意义
或许可以看一下here更长的解释
答案 1 :(得分:2)
k = (k < 3) ? ++k : 0;
这意味着:
1)增量k
2)评估(k <3)? (新k):0;
3)将步骤2)的结果保存在k
中
k = (k < 3) ? k++ : 0;
这意味着:
1)评估(k <3)? (老k):0;
2)增量k;
3)将步骤1)的结果保存在k中(覆盖步骤2的值)
如果不将RHS的结果分配给k,那么你想要实现的目标是最好的。
答案 2 :(得分:0)
k++;
仅表示k = k + 1;
++k
表示递增,然后将新值分配给k
。