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;