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;