java中:public class A{
public static void main(String args[]){
int i = 0, j;
for(j = 0; j < 10; j++){
i = i++;
}
System.out.println(i);
}
}
输出:0C中:
#include "stdio.h"
main()
{
int i = 0, j;
for(j = 0; j < 10; j++)
{i = i++;}
printf("%d\n", i);
}
输出:10C版的我明白,但JAVA版的不解。请高人指点

解决方案 »

  1.   

    public class A{
    public static void main(String args[]){
    int i = 0, j;
    for(j = 0; j < 10; j++){
    i = i++;
                      //我的理解是:1.i++:temp=i;i=i+1;
                      //            2.i=i++;temp=i;i=i+1;i=temp;
    }
    System.out.println(i);
    }
    }
      

  2.   

    但就自增运算符的执行方式和优先级顺序,java和c的描述都是一样的。为什么会造成执行结果的不同呢?据说是与什么寄存器有关,完全不明白。
      

  3.   

    i = i++ 本来就是一个有病的代码,这种代码在不同的编译器中都会有不同的解释,现在只是java与C#的解释不同罢了
      

  4.   

    为什么要写成i=i++;这种形式啊
    直接i++就好了
      

  5.   

    java的内部机制问题,不需要深究。
      

  6.   

    i++; //i=i+1
    i=i++;//i=i=i+1
    是不是这样?
      

  7.   

    for循环写的不对,根本不会执行,当然输出j的初始值0了。晕死!
      

  8.   

    这个问题以前看到过,好像是一道考题,我个人的理解是这样的,在java中,数据间的传递是值传递,而不是指针传递,(C也是这样的)所以说i = i++;所做的事情是可以分成2部分,第一步:i = i; 将第二个i的值附值给第一个i第二步:i++;将第二个i++;而此时,++的是第二个i,而不是第一个i,虽然,两个i都是内存中的同一块内存区,但是根据值传递的方式。第二个i的++后的值,将不会影响到,第一个i值得结果。不知道,我的理解对不对,希望大家指正。谢谢。
      

  9.   

    i = i++; 这个语句里包含了 3 件事情:1. 取出 i 的值,计算出右侧表达式的值;2. 对变量 i 进行自增计算;3. 把 1 中计算出的表达式的值赋给变量 i。而这 3 件事,在不同的编译器之下,执行顺序是不一样的。在 Java 中是 1>2>3,在 C 中是 1
    >3>2。所以就会出现楼主看到的现象。不过,是不是所有的 Java 和 C 的编译器都是按照上面说的顺序工作,我也没有把握,反正没有见到过“标准规范”说明这个事情。也许就像前面 xoch421() 说的,“java的内部机制问题,不需要深究”。
      

  10.   

    如果想更直观地看到前面说的过程,在 Java 里用 javap 看一下 class 的字节码,在 C 中进行一下汇编级的单步调试,就能看得清清楚楚了。
      

  11.   

    maquan('ma:kju) ( ) 
    ------------------
    多谢。结贴,给分。汇编还是有用地...