int j=0;int u=0;
for(int i=0;i<100;i++)
{u=j++;}
system.out.println(u);
int j=0;
for(int i=0;i<100;i++)
{j=j++;}
system.out.println(j); 

解决方案 »

  1.   

    第二个你循环几次都是0,因为j=j++;这个表示j的值一直不变,j++表示取出j的值0,然后j的值自增为1,最后将先前取出的j的值0又赋给了j,最后j就又变成了0。你循环多少次都是一样的。
      

  2.   

    那个之前所说的j=j++ 先赋值后++的说法是错的了 应该是 先取值 在++ 然后再把取出的值赋给j 这样理解 对吧
      

  3.   

    你就理解成。j++是取出j的原始值放到寄存器中,然后内存地址中j的值自增1,然后进行=操作,将寄存器中的值0赋值给内存地址中j,就是你折腾半天,自己挖个坑,然后用挖出来的土再填上,再挖,再填上...
      

  4.   

    http://www.iteye.com/topic/1120537
    在上面看下3L的
      

  5.   

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

  6.   

    j = j++;
    其实是j=0先赋值给本身,然后再进行自增操作。
    第二次的时候,由于上次赋值给j的值是0,所以等于重复第一次的操作。
    到最后到时候仍然还是0。
    如果该成是j = ++j;
    那么是j先进行自增操作,再进行赋值给本身,那么第一次后j的值为1
    以后每次自增1,循环100次,所以最后结果为100。
    第二个的结果为99是因为有2个不同的对象。
    循环100次,j自增到99,然后把自己的值赋给u,所以u为99