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;





你可能感兴趣的:(笔试题)