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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值