i = i++

来源:互联网 发布:关于51单片机与esp8266 编辑:程序博客网 时间:2024/05/16 11:41
public class Demo02 {
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;

  1. public static void main(java.lang.String[]);
  2.   Code:
  3.    0:   iconst_0     //0放到栈顶
  4.    1:   istore_1    //把栈顶的值保存到局部变量1,也就是i中
  5.    2:   iload_1     //把i的值放到栈顶,也就是说此时栈顶的值是0
  6.    3:   iinc    11  //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。
  7.    6:   istore_1     //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0
  8.    7:   getstatic   #2//Field java/lang/System.out:Ljava/io/PrintStream;
  9.    10:  iload_1
  10.    11:  invokevirtual   #3//Method java/io/PrintStream.println:(I)V
  11.    14:  return

这样你就能看到其中的变化了



0 0
原创粉丝点击