JAVA i=i++的问题

来源:互联网 发布:大o符号 算法 编辑:程序博客网 时间:2024/04/29 09:41

问题引入

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的值没有变化。

原创粉丝点击