public class TestDemo{
    public static void main(String args[]){
        int i=0;
        i=i++;//这里前面的i被赋予0的值我可以理解,但是这条语句执行之后右边的i++为什么没有继而改变i的值呢?我不能理解
        System.out.print(i);
//输出为0;
    }
}
//希望给我一个具体的解释,万分感谢!

解决方案 »

  1.   

    i++ 是先赋值,后增加i = i++
    等同于
    i=i
    i++如果你想i增加1,使用
    i += 1;
    或者
    i = ++i;
      

  2.   

    对 i=i++ 和i=++i的解释。
    在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。  
    因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的i=i++,又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。 
    又因为i = ++i;是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈,虽然最后执行了i = ++i,但也只是将堆栈中的值(1)弹出赋给变量区的i,所以i = ++i;的结果是i = 1。
      

  3.   

    to : 2楼

    i++   是先赋值,后增加 i   =   i++ 
    等同于 
    i=i 
    i++ 

    这样打印会打印出是1而不会是0?
      

  4.   

    这里的i=i++;所进行的操作只是保存了一个临时变量而已。并没有真的对i进行赋值操作。
      

  5.   

    上面的道理已经说了,如果你要打印是1,你可以直接写i++或者写i=i+1就可以了.
      

  6.   

    错,如果直接在println里面写上i++的话,输出依然是0.
      

  7.   

    int   i=0; //原先i=0
    i=i++;//这里先执行i++,表达式(i++)返回0,然后i自加为1,接着再把表达式(i++)的值赋给i,这时i又变为0了。
      

  8.   

    12楼 不会的 这是一道SUN275认证题中的一部分,输出始终为0。
      

  9.   

    首先我不是高手,我也是菜鸟。
    这个问题以前在一个java群里有人讨论过,我只是把大家最后讨论的结果拿出来了,呵呵。
    这个问题CSDN以前也有人提过,刚去查了,没找着,楼主可以去找找。