public class Test{
             public static void main(String[] args){
               int i=0;
                   i=i++;
         System.out.println("i="+i);
                                                  }
                    }
结果是:0;
          为什么,涉及到内存的管理,具体是怎么样的呢?详细说一下!

解决方案 »

  1.   

    楼主学过C吗?这是很基本的问题
    先去看一下程序设计的基础,再学java
      

  2.   

    上面几位说的我都知道。    这是i=i++;的问题,而不是a=i++;的问题。
      
    我想知道的是,具体他们在内存当中的存储,与赋值是怎么样的呢?给出过程。
      

  3.   

    没有看到合理的答案
    i=i++;
    等价于:
    int temp=i;
    i=i+1;
    i=temp;
    结果是什么也没做
      

  4.   

    treeroot(旗鲁特) 的说法不赞成...
    应该等价于
    i=i;
    i=i+1;
      

  5.   

    i=i++;
    这个等于没写
    直接写i++吧
      

  6.   

    经过测试:在 Java 中,
    -------------------------------------
    int i = 0;
    i = i ++;
    System.out.println(i);
    -------------------------------------
    得到:0
    在 VC++ 中:
    -------------------------------------
    int i = 0;
    i = i ++;
    printf("%d\n", i);
    -------------------------------------
    得到:1因此,大家不要在这里争了,让 Micorsoft 和 Sun 去争吧。
      

  7.   

    soulsteal(冒菜) 如果按照你的意思,还能忽略吗?
      

  8.   

    soulsteal(冒菜) 如果按照你的意思,还能忽略吗?
    所以我说的是被java编译器跳过了,不但没执行i=?,连i++都没执行...上头有人测试了,C++是正常理解...结果应该是1...
      

  9.   

    被编译器跳过那就更说明你的说法是错误的呀!
    编译器跳过是编译器优化的问题,和我们的结论没有关系i=i++; 这条语句当然是先计算i++在前,赋值在后 
    如果c++执行这条语句会有影响的话,只能说明它是不合理的,有点晦涩!所以可以这样理解:
    i= xxx(i);        xxx(int i){ int temp=i;i=i+1;return temp; }
      

  10.   

    i=i++;
    可以写成
    i=(i++); //应该没有问题吧
    当然就可以写成
    int temp=(i++);
    i=temp;
    这样理解起来当然是很轻松的呀至于c++导致令人难以理解的结果确实是个问题,可能和c++的指针处理有关系,不过总觉得别扭!
      

  11.   

    这个本来就是一个多余的代码,如果真有人这样写代码,无论在C中还是在Java中,都是必须修改的地方。引人误解
    C与Java的结果不同,只是他们对于这个的定义计算顺序不一样,这个没有什么合理不合理的。
      

  12.   

    http://spaces.msn.com/cnyxlxw/blog/cns!C759077912DB96E9!115.entry
    楼主看看这个去吧!
      

  13.   

    i++;
      就行了!那还有这么多废话啊!
    内存的问题就是
    i=i++;
    等价于:
       i =int temp=i;结果是什么也没做
      

  14.   

    同样一句 i=i++,在 Java 语言里,它的执行细节是:
        1) 取得 (i++) 这个表达式的值,结果为 0
        2) 对 ++ 运算符进行计算,结果 i 变成 1
        3) 用 1) 中得到的值对 = 运算符进行计算,结果 i 变成 0
    而在 C++ 语言里,它的执行细节是:
        1) 取得 (i++) 这个表达式的值,结果为 0
        2) 用 1) 中得到的值对 = 运算符进行计算,结果 i 变成 0
        3) 对 ++ 运算符进行计算,结果 i 变成 1
    这只是不同语言编译器实现的逻辑不同而已。
    其实,试验一下 j = (i++) + (i++) 更容易看清楚这个问题。
      

  15.   

    i=i++ 先赋值后自增
    i=++i先自增后赋值
      

  16.   

    看了c的定义后,发现c对这个顺序没有做规范,不同的编译器可以不同实现根本不是什么内部模型的问题
    i+i++ 这个值在c是不确定的(依赖编译器的)