问题 很简单 但我相信 这个问题能让我们更加的了解java虚拟机!
j=0;
j=j++;
经过运算后,那 j 之后的答案是?

解决方案 »

  1.   

    0
    j++之后j++的值为0,j的值为1,
    然后把j++的值赋给j,即j=0;
    So,最后j的值为0;
      

  2.   

    老师说j++就是先计算,再加1,++j是先加1,再计算,这里的先后都是针对的j。
      

  3.   

    int i= 0;
    i = i++;相当于定义了一个int型变量i,并赋初始化值0,再内存中把i的初始化值再重新放进该变量,再拿出去做运算.就是先赋值,后运算
    i = ++i;的意思在内存中把i做了自增操作,再重新赋值给i;
    因此i++的结果是0;
    ++i的结果是1;
      

  4.   

    其实这种问题,并不能让你更理解虚拟机。因为,无非就是副作用和顺序点的问题。如果,java官方明确定义了,副作用和顺序点。还有副作用之间的相互顺序。那么编译器就会有一个统一的实现,如果没有。那么不同的编译器的结果就可能不同。在这里需要看 j++ 这个副作用什么时候产生了。如果在赋值之前产生,那么结果为0。如果在复制后产生,那么结果为1。最佳时间就是别写这种代码。
      

  5.   

    结果是0.因为自增运算符有两种:++j 和 j++ 。++j是先计算后赋值,而j++是先赋值后计算。所以没有循环控制的情况下,以上例子如果打印J的话结果为0,而J的当前值为1.