public class Demo02 {
public static void main(String[] args) {
int i = 0;
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
}
结果是0;很神奇吧,其实可以这样理解
i++的结果还是i。只有在下次用到i的时候i的值才有变化。
i=0,i++的时候返回结果是0,但是i的值变成了1,但是这个时候又将i赋值为i++,所以i的值还是没有变化。
你可以调试的时候看一下i的值,将i=i++;改成两句
tmp=i++;
i=tmp;
- 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
这样你就能看到其中的变化了