如题:
int i =0;
i = i++;
执行完结后i为什么还是等于0?
c中也是这样吗?

解决方案 »

  1.   

    因为他是i++,i=0  在自增   如果++i就是先自增  
    c也是这样的
      

  2.   

    i=i++;
    相当于
    int temp=i;//读取i,准备给左侧赋值
    i=i+1;//i++;
    //左侧的操作完成
    i=temp;建议:不要在一个表达式中对同一个变量赋值超过1次.
      

  3.   

    一样..你换成 i=++i; 试试..
    我认为这种问题很无聊. 还有什么 
    i=i++; j=++j; z=(++i)+(j++);问你Z等于什么..纯粹脑子有病..
      

  4.   

    你搞混了一个问题..就是赋值跟自增.先赋值,再自增 
    这样的话,执行结果应该也是1啊先赋值以后 i 的结果是 0;然后后面的i+1 但是.. i+1后并没有把值再次赋回给i..所以还是0.
      

  5.   

    呵呵,这个理解是错误的,i自增是i++就是i=i+1;会改变i的值的.
    具体原因我在上面贴子写过了,你可以看bytecode中是如何执行的,<Java Puzzlers>这本书中也有详细的解释.
      

  6.   

    java和c的提取顺序是不一样的.
      

  7.   

    这个 Java Puzzlers 确实是那样写的..我的是错误的.楼主 赶紧来看帖子啊.  不好意思.
      

  8.   

    做了个测试i=0;
    i=i++;
    System.out.println(i) = 0;i=0;
    i++
    System.out.println(i) = 1;i=0;
    System.out.println(i++) = 0将i++改成++i则结果都为1另: i = ++i; 在Eclipse中提示对i赋值不生效, 但结果仍为1
      

  9.   

    我已经写过了
    j=j++;
    相当于:
    int tmp=j;
    j=j+1;
    j=tmp;
      

  10.   

    int i = 0;
    int j = i++;
    int k = ++i;

    System.out.println( i );
    System.out.println( j );
    System.out.println( k );这个结果是2,0,2;通过这个例子可以基本分清赋值和自增的区别
      

  11.   

    c一样的只是运算顺序,但是结果是1,不是0。我认为这可以说是JAVA的一个BUG,用2楼的可以说明为什么结果是0,但是JAVA的这种解析是错误的,因为本来有两次的赋值运算,结果JAVA解析器只做了一次。
      

  12.   

    int i=0;
    //这个是先给i赋值,再进行自加,是两码事
    所以在输出的时候还是原来的初始值0
    i=i++;
    //结果为0//这个是先进行自加,再给i赋值
    i=++i;
    //结果为1
      

  13.   

    这不是bug,java语言规范中有说明。
    java毕竟是java,和c不同。
      

  14.   

    zangXT是正确的哦。其实这个过程中,i的值是从0-》1-》0
      

  15.   

    i在++前就先使用i再++,在后就先++后使用i
      

  16.   

    如果有底成的Java书籍,建议你去看看里面的语法
    找到后你就不会有想要的结果了
    这个C里面也有的小知识
      

  17.   

    c中等于1.
    在java中。i是个值的调用而非引用。
      

  18.   

    不管什么语言
    i++
    和++i得到的结果都应该是一样的
    int i = 0;
    System.out.println(i++);//得到0
    System.out.println(i);//得到1
    System.out.println(++i);//得到2
    i=i++;
    System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。
      

  19.   

    我用C#试过了,和java得结果一样,=得优先级比++高。
      

  20.   

    使用eclipse 中的bug啦,对于它执行的先后,一步一步的让它跑啦,之后,你就知道这的原因啦,你可以试一下啦,这要比你问要来的实在呀,试一下啦!
      

  21.   

    i=i++和i=++i结果是一样的没分别.
      

  22.   


     假如在你这些代码后面再加上一句
    System.out.println(i);
    你认为最后的结果是什么呢,我刚试过了,还是2.
    int i = 0; 
    System.out.println(i++);//得到0 
    System.out.println(i);//得到1 
    System.out.println(++i);//得到2 
    i=i++; 
    System.out.println(i);//得到2,首先进行赋值,然后++。因为i是值引用,所以旧的i改变不会影响到i。
    System.out.println(i);//假如在你这些代码后面再加上这一句结果还是2;
    而且用C的话结果并不一样
    int i = 0; 
      printf("%d",i++);
      printf("%d",i);
      printf("%d",++i);
      i=i++; 
      printf("%d",i);
     结果是0123.
      

  23.   

    i = i++;
    应该跟
    i++一样吧
      

  24.   

    这和jvm有关的,在自增运算中,java会开辟另一块空间给++ --使用,
    至使原来的值未改变
    因此输出为0;
    c++里会输出1;