若i = i++;改为i++;
就是3。
因为i++是先赋值,再累加,所以先把2付给了i

解决方案 »

  1.   

    谢谢指点。对呀,你说的这点我理解,因为这就是为什么有 After:中 j 与 i 结果的原因。我不理解的是在 i = i++; 中,右边的 i 先给左边的 i 付值 2,然后右边的 i 累加 1。
    为什么这个右边的累加 1 的 i 值对下面一行中的 i 的值没有影响?都是变量 i 呀。
      

  2.   

    请问楼上的大哥
    当执行完i=i++;语句后,也就是将2付值给i后,i不是正好自动加1吗?
    输出的结果是3才对啊?
      

  3.   

    Before改成++i就是3了
    ++i是 先+后显示,显示+以后的
    i++是 先显示后+,显示+以前的
      

  4.   

    可以做个假设,i赋值后,i在内存中的位置改变了,++操作只是针对原来的地址的值进行加1操作,而没有影响到赋值后的i的值。
    不知道我这样的假设对不对,请高手指教!
      

  5.   

    这种情况用javap来分析最好了,用法是javap -c classname
    代码如下
    i=2;
    i=++i;
    反汇编如下
    0 iconst_2
    1 istore_1
    2 iinc 1 1//先加1
    5 iload_1//然后放到寄存器中
    6 istore_1//从寄存器中取出并赋值
    改变代码如下
    i=2;
    i=i++;
    反汇编如下:
     0 iconst_2
     1 istore_1
     2 iload_1//先将值放到寄存器
     3 iinc 1 1//值加1,但此时寄存器上值不便
     6 istore_1//用寄存器上值赋值