int i=0;
i=i++;
System.out.println("i="+i);
输出的结果是0,为什么?

解决方案 »

  1.   

    i=i++;
    等同于:
    i = i;
    i = i + 1;
      

  2.   

    i++是先赋值 后运算 就是先把0传给给i 然后再++
    i = 0;
    for(int j = 0;j<100;j++) {
       i=i++;
    }
    System.out.println(i);
    结果仍然是0  这个看着更爽 哈哈
      

  3.   

    说错了,不好意思.
    i = i++;相当于:
    i = i + 1;此时i的值在内存中变成1,但是i = i的时候i还用的0,又将i的值变回成0,所以结果是0.记得《java解惑》里有这个题
      

  4.   

    i=0;
    i=++i;
    System.out.println("i="+i);
    应该可以!
      

  5.   

    http://hi.baidu.com/freish/blog/item/aa947f8b42c4e118c9fc7a07.html
      

  6.   

    根据JAVA解惑所说,不能在一个表达式对一个变量赋值超过1次。
      

  7.   

    i=i++
    首先计算了i++,由于这个++是后置的,所以i的值并没有改变,但的确得到了一个i+1的结果,这个结果被暂时存在某个地方。
    接下来,你赋值i,相当于是用i赋值他本身,结果肯定就还是0了。
    也就说,i++的计算结果,你在这个等式里是找不到的。如果是i=++i
    就不一样了,也是先计算++i,由于这个++是前置的,所以i+1的结果直接就赋值给他自己了。
    然后,再赋值一次i,就相当于把i+1这个结果再次赋值给i了。
    实际上这样子没啥意义,i=++i还浪费时间,多了一次赋值运算。
    不如就直接++i呢。:)
      

  8.   


    int i=0,temp;
    temp = i++;
    i=temp;
      他编译执行的过程是这样滴
      

  9.   

    i++,是先赋值,在相加 等同于:     i = i;
         i = i+1;
    所以是先把i打印,后i在加1
      

  10.   

    i = i++;
    等同于:
    int temp = i;
    i++;
    i = temp;
      

  11.   

    楼主,输出结果是对的,i++ 表示 先运算 后再自加1 ++1是 先自加1 后参与运算。上面要是改成
    int i=0;
    i=++1;
    System.out.println("i="+i);
    那么输出的结果就是1
      

  12.   

    我认同你的疑惑
    看我12L的回复
    i实际上进行了计算,只不过计算结果没有存储到i中来
      

  13.   

    将class文件Disassemble之后,看看disassemed code就明白了吧
    int i=0;
    i=i++;jvm指令
    0:   iconst_0 #  将整数0压到栈顶
    1:   istore_1 # 将栈顶int型数值存入变量  i=0
    2:   iload_1 # 将变量压入栈顶(把i的值放入栈顶)
    3:   iinc    1, 1 # 将i的值增加一
    6:   istore_1 # 将栈顶值存入i变量(i的值增加之后并没有压入栈顶,栈顶元素仍然是0)
      

  14.   

    这个问题我以前也有在论坛上问过。
       实际上 ,这个结果根据不同的语言 ,结果不同的。
    在java中 是0.运行的情况与12楼说的一样 。但是在C/C++ ,或者其他语言中的情况又不一样。
    楼主可以试一试。要根据编译器而定。不要太在意这个问题。
      

  15.   

    十六楼的说法确实有问题
    int i = 0;
    i = i++;
    System.out.println("i = "+i);
    int j = i;
    System.out.println("j = "+j);
    结果都等于0可以证明

    for(j = 0 ;j<100;j++){
    i = i++;
    System.out.println(i);
    }
    这样输出全是零  二楼说的对
    但具体我也不理解  希望有人解释
    我猜测有可能与+重载有关!!!!!
    希望有人可以解释
      

  16.   

    看得出,楼主并不是不了解 i++ 和 ++i 的区别,而是对类似 int j = i++; 这样的赋值表达式的具体执行细节不够了解。 
    先从 int i = 0; int j = i++;开始说起,此时执行结果为 j=0; i=1;
    那么它的执行过程是怎样的呢?无论 i++ 还是 ++i i必定执行加1操作,所不同的是:
    int j = ++i;是将i加1后的值赋给j,也就是通常所说的先加1再赋值,Ok,重点来了,int j = i++;是这样执行的:j最后一定获得的是i未加1前的初始值!
    也就是这样的过程:int temp = i; i = i+1; j = temp;
    Ok,上面的三句代码才是我们所说的 int j = i++; 先赋值后自加的真相!
    那么, i = i++;就好理解了,i最后一定要获取i未加1之前的初始值,所以:
    int temp = i; i = i+1; i = temp; i最终还是回到了自己的初始值!我文字组织能力不强,不知道楼主是否看懂了,希望能够帮到楼主。
      

  17.   

    哦,明白了,原来是等价于:int i = temp; i = i + 1; i = temp;
      

  18.   

    int i=0;
    i=i++;
    System.out.println("i="+i);
    输出的结果是0,为什么?因为
    (1)
    i=i++ 相当于两步操作:
    第一步:i=i;
    第二步:i+1;//注意第二步的时候没有赋值给i了,所以 i的值依然为0PS:如果你要打印i=1的话,用i=++i;就行了,因为i=++i相当于这两步操作:
    第一步:i=i+1;
    第二步:i=i;//可以比较两者的区别,很容易发现,其实是运算符优先级的问题。这主要是i++和++i的问题,前者i++是先用再加,后者++i是先加再用建议楼主可以查看java基础课程中的运算符优先级,那里很多这样的案例,祝你好运。
      

  19.   

    我认为 在循环里面  i=i++  相当于i=i;i+1   i+1了 但是i+1的结果没有赋值给i所以循环内始终执行i=i,结果也就是0了
      

  20.   

    杜绝c,c++的东西,要这样写int i = 0;
    i = i+1;
    System.out.println("i="+i);
      

  21.   

    要加1的话直接i++或++i不就行了,还搞个i=i++。多此一举啊
      

  22.   

    i=i++;
    相当于
    int j=i;
    int k=i+1;
    i=k;
    i=j;
      

  23.   

    i++表示:第一步,等号右边先把i的值作为i++的值;第二步,对i进行自增;第三步,将右边的值赋值给左边的i。这样输出的结果就是i=0
      

  24.   

      int i = 0;
            int p = 0;
            for(int j = 0;j<100;j++) {
              p = i++;
            }
            System.out.println(p);    输出99 int i=0;
            int p = i++;
            System.out.println(p);  输出0
    我个人认为不是跟打印有关于,跟运算符"+"重载有关
      

  25.   

    i= ++i; 相当于 先加 再 赋值 
    i= i++; 反过来
      

  26.   

     i =i++ 是先给i赋值后返回值 然后在自加运算,但是自加运算是在一个语句块中运行相当于一个局部变量,运行玩一次之后进行垃圾回收,对全局变量没影响 ,进行下次运算的时候还是用全局变量的值
      

  27.   

    当然是0了 ,以为i++就没有调用,如果你输出i++的话就好,这是java中的一个很重要的知识
      

  28.   

    因为i=i++,他是先把i的值付给前面的i,然后再在i的基础上+1
      

  29.   

    因为i=i++;记j=i=i++;你打印的相当于j,这里的j为0,所有结果为0
      

  30.   

    ++i,先把i加1,再管其他的,i++先管其他,再加一
      

  31.   

    稍微看下就能理解i++ 与 ++i了
    其实对于i=i++这个式子本身就不是太规范吧
      

  32.   

    int i = 0;
    i = i++;
    等同于:
    int i = 0;
    int t = i;
    i = i + 1;
    i = t;
      

  33.   

    i=i++;
    这一句又将0赋给i了,之后没有i++语句。所以i的值是0.
      

  34.   

    int i=0;
    i++;
    System.out.println("i="+i);
    输出的结果是 就为1了