Java下的i++问题

  在解决一道面试题目时遇到问题。

public class Inc {
    public static void main(String args[]){
        Inc inc = new Inc();
        int i =0;
        inc.fermin(i);
        i=i++;
        System.out.println(i);
    }
    void fermin(int i){
        i++;
    }
}

  题目答案是输出0。

  查阅相关资料时,才知道i=i++这一步,真实执行情况是temp = i;i=i+1;i=temp;

  未验证真是如此,我将代码改为如下:

public class Inc {
    public static void main(String args[]){
        Inc inc = new Inc();
        int i =0;
        inc.fermin(i);
        int j=i++;
        System.out.println(j);
    }
    void fermin(int i){
        i++;
    }
}

  输出结果依旧是0,这符合预期。即:temp=i;i=i+1;j=temp;

  而不仅仅是像有些C/C++那样只执行了i++这一步

  实际上,i=i++,亦或是j=i++之后由于执行i++这步,i的值都会有所增加,只是之后i(/j)=temp这步又将i值变回去,所以只要将代码改成如下这样就可以看到i值的变化了

public class Inc {
    public static void main(String args[]){
        Inc inc = new Inc();
        int i =0;
        inc.fermin(i);
        int j=i++;
        System.out.println(i);
    }
    void fermin(int i){
        i++;
    }
}

  输出的结果是1

  说到底其实还是编译器的问题,没必要过分纠结于此!

  

 

原文地址:https://www.cnblogs.com/jenkov/p/javaiplusplusproblem.html