int i=1;
i = i++;
System.out.println("i="+i);
显示结果是1;对于i = i++;不是相当于i = 1; i++;吗?应该i最后的结果是2。
请指教!

解决方案 »

  1.   

    是先把i的值(1)取出来,然后++,i=2,最后,1复制给i,,这样子吧
      

  2.   

    i++是先用,再加
    ++i是先加,再用
    你试试++i是什么结果.
      

  3.   

    理论上来说是i = 1; i++,但实际上,这个和C++的做法有点不同,与Java虚假机中的实现有关。
    讨论这个没啥意义,实际应用中写这样的代码就应该挨骂。
      

  4.   

    实际步骤是这样的
    1 ++, 此时i=2
    2 (i++)返回的是i的原始值,=1
    3 i=i++, 所以又把i赋值成1了
      

  5.   

    j = i++
    =>
    x = i
    i = i + 1
    j = xi = i++
    =>
    x = i
    i = i + 1
    i = x
      

  6.   

    i=i++;
    可以看出,在这条语句存在的前提下 i++所存储的变量开辟的是另一块内存
      

  7.   

    别让程序中出现i=i++这样的代码,哪怕知道这么做的结果......不直观,可读性太差......纯学习的话,应该同5楼和7楼所说的,i++会在整行语句结束后才改变i的值...
      

  8.   

    我在2002年写了一篇关于这个东西的文章,在CCW的论坛上。不过现在论坛改版,网上找不到了,只好再发一次。int i = 0; i = i++; i值为0的原因看一段程序及其运行结果:/*
     * @file Test.java
     * @author James.Fan
     */public class Test {    public static void main(String args[]) {
            int i = 0;
            i = i++;
            System.out.println(i);//0
            int j = 0;
            j = i++;
            System.out.println(i);//1
            System.out.println(j);//0
        }}
    查看.class文件中的指令(用JDK中的javap命令查看.class文件中的指令),可以看到如下内容(去掉了System.out.println语句之后的),“//”后面的是我写的注释
    Method void main(java.lang.String[])
       0 iconst_0       // 将常量 0 入栈
       1 istore_1       // 出栈,并将出来的值存入第 1 个变量,这里指 i
       2 iload_1        // 将 i 的值取出来入栈
       3 iinc 1 1       // 对 i 进行自加运算 (这里没有影响栈中的数据)
       6 istore_1       // 出栈,并将出来的值存入 i
       7 iconst_0       // 下面的过程请类似的分析
       8 istore_2
       9 iload_1
      10 iinc 1 1
      13 istore_2
      14 return为了搞清楚运算过程,我写了一个简单的加法程序,如下:/*
     * @file Test.java
     * @author James.Fan
     */public class Test {    public static void main(String args[]) {
            int i = 3;
            i = i + 4;
        }}
    然后将生成的 .class 文件反编译成指令序列,如下:
    Method void main(java.lang.String[])
       0 iconst_3       // 将常量 3 入栈
       1 istore_1       // 出栈,并将出来的值存入第 1 个变量
       2 iload_1        // 将第 1 个变量中的值取出来入栈
       3 iconst_4       // 将常量 4 入栈
       4 iadd           // 出栈两次,并将出栈的两个值相加,结果入栈
       5 istore_1       // 出栈,将出来的值存入第 1 个变量
       6 return
      

  9.   

    iambic 
     
    j   =   i++ 
    => 
    x   =   i 
    i   =   i   +   1 
    j   =   x i   =   i++ 
    => 
    x   =   i 
    i   =   i   +   1 
    i   =   x妙!