问题引入
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++;
}
}
分析
首先,i初始化为0;调用函数,这里是“值传递”,函数中的i只是本来i的一份拷贝,并没有改变i的值。
对于i=i++;
看一波反编译后的代码
public static void main(java.lang.String[]);
Code:
0: iconst_0 //0放到栈顶
1: istore_1 //把栈顶的值保存到局部变量1,也就是i中
2: iload_1 //把i的值放到栈顶,也就是说此时栈顶的值是0
3: iinc 1, 1 //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。
6: istore_1 //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return
我们可以看到,i++之后的值并没有赋给i,所以i的值没有变化。