java 中i = i++ 之后 i 的值为什么是 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++; 
    } 
}

这应该是百度的一道java笔试题。

输出为0;

网上参考大都是从javap -c 命令反编译一下class文件,然后去分析,本人菜鸟一只,不是很理解,接下来从自己的理解角度来分析下:

首先区分下i++++i:

简单的理解就是i++是先访问i然后再自增,而i++则是先自增然后再访问i的值。

关于第二个陷阱(为什么 fermin方法没有影响到i的值 )的解答看下面。
1
inc.fermin(i);
1. java方法之间的参数传递是  值传递 而不是  引用传递

所以fermin方法里的i和main里的i又不是同一个i了。

梳理:

第一步:i=0;

第二步:inc.fermin(i)为干扰项,main中i仍为0;

第三步:i=i++; 因为i++是先访问i然后再自增,i取的是i=0时的值。

所以输出为0;

思考:当i=i++改为i=++i时输出又如何呢?


答案为1;





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值