[code=Java][/public class Text2 {
public static void main(String[] args) {
int i = 0 ;
for (int j = 0; j < 100; j++){
i = i++;
}
System.out.println(i);
}
}
]

解决方案 »

  1.   

    怎么了?i还是0啊
    不管你执行多少次i=i++,i都是0
    因为:
    先看等式右边,i++,这个时候,i还是0,下次使用i的时候i才是1,接着再将这个0赋给等式左边的i,所以i始终是0
    你如果换成i=++i,就可以得到100了
      

  2.   

    这个比较麻烦。i++是先赋值,然后再自加。当i=0时,先给i=i++左面的i赋值0,然后右面的i自加,但i已经不是原来的i的引用了,右面的i原来的引用是真的变成了1。但i一直都是0。我表达不好,不过总有人懂吧。
      

  3.   

    因为i=i++,是只将i的值赋给i然后i+1
    先看等式右边,i++,这个时候,i还是0,下次使用i的时候i才是1,接着再将这个0赋给等式左边的i,所以i始终是0
    你如果换成i=++i,就可以得到100了
      

  4.   

    在JVM中有两个存储区域,一个是暂存区,一个是变量区。
    在javap里面看,语句istore_1是将暂存区中的值存入相应的变量区,也就是我们说的赋值。语句iload_1是将变量区中的值存入暂存区中。
    因为i=i++;是先将i的值(0)存入暂存区,然后对变量区中的i自加1,这时i的值的确是1,不过随后的istore_1又将暂存区的值(0)赋给变量区的i,所以最后i = 0。 
      

  5.   


    //100
    class test
    {
    public static void main(String[] args){
    int i=0;
    for(int j=0;j<100;j++)
    i++;
    System.out.println(i);
    }
    }===============================================
    //0
    class hao
    {
    public static void main(String[] args){
    int i=0;
    for(int j=0;j<100;j++)
    i=i++;
    System.out.println(i);
    }

    }
    ================================================
    //100
    class test
    {
    public static void main(String[] args){
    int i=0;
    for(int j=0;j<100;j++)
    i=++i;
    System.out.println(i);
    }

    }
    这个程序以看就明白了,
      

  6.   

    在《java解惑》这本书中讲的很详细,呵呵~~