int m=2;
for(int i=0;i<100;i++){
  m=m++;
  System.out.println(m);
}
为什么打印出来都是2?

解决方案 »

  1.   

    m++与++m的区别是:
    m++先使用m的原来值,然后才对m进行加1操作,即:m=2。
    ++m是先对m原来的值进行加1,然后再进行操作。
    你的m=m++就是把m先前的值2,再次赋值给m,然后才进行加1操作,但其进行加1后的值没有赋给任何变量进行保存。当进行下一轮循环时,m的值还是为2,再进行m=m++的操作,m还是等于2,以此类推。
    所以得到的结果永远为2.
      

  2.   

    如果这样写的话:
    int m=2;
    for(int i=0;i<100;i++){
    m++;
    System.out.println(m);
    }
    结果又不同,大家可以试试
      

  3.   

    楼主...关于这个贴列..你可以参见我博客里面<关于JAVA基本数据类型运算> 里面的分析..我自认为写的很详细...其实关键是内存分析....呵呵
      

  4.   

    楼主你可以把m=m++;改成m++;或者m+=1;或者m=m+1;总之m++是先使用再加的,所以你给m永远赋值成原来的值了,
      

  5.   

    我觉得1楼的解释不妥.
    int m = 2;
    for(int i = 0;i<10;i++) {
       m++;
       System.out.println(m);
    }
    这个m没有赋给任何变量进行保存,
    可是却会增长!
    支持11楼观点,
      

  6.   

    m没变过啊,每次都是先取m...所以就是m=m
      

  7.   

    m++与++m的区别是:
    m++先使用m的原来值,然后才对m进行加1操作,即:m=2。
    ++m是先对m原来的值进行加1,然后再进行操作。
    你的m=m++就是把m先前的值2,再次赋值给m,然后才进行加1操作,但其进行加1后的值没有赋给任何变量进行保存。当进行下一轮循环时,m的值还是为2,再进行m=m++的操作,m还是等于2,以此类推。
    所以得到的结果永远为2.
    这样 m 从f循环里出去还是 2
    是不会变得啊 
    呵呵  
      

  8.   

    m++与++m的区别是:
    m++先使用m的原来值,然后才对m进行加1操作,即:m=2。
    ++m是先对m原来的值进行加1,然后再进行操作。
    你的m=m++就是把m先前的值2,再次赋值给m,然后才进行加1操作,但其进行加1后的值没有赋给任何变量进行保存。当进行下一轮循环时,m的值还是为2,再进行m=m++的操作,m还是等于2,以此类推。
    所以得到的结果永远为2.
      

  9.   

    手头没有反编译器。
    很好奇这段程序被编译之后会被“优化”成什么样子。good luck
      

  10.   

      跑了一下,确实是0. 先赋值再++是没有问题的,但是个人对"但其进行加1后的值没有赋给任何变量进行保存"这句话觉得比较难理解。如果真是这样的话那是不是"m = m++;"就等同于"m = m;"?还有"m++;"又该怎么理解呢?是m++的时候操作的是m所引用的内存块的值吗?
      在C中这块代码的执行结果是:最后m的值是102。对JVM没有深入的了解,期待高手解惑。