Java三元运算符和后缀/前缀操作

时间:2014-02-04 07:54:15

标签: 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);
       }
    }
}

输出是:     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

有什么区别以及为什么我们没有相同的输出?

3 个答案:

答案 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