请教一试题/**
 * Hello world!
 *
 */
public class CopyOfApp 
{
    public static void main( String[] args )
    {
     
     int j=0;
     int b=0;
     for (int i = 0; i < 100; i++) {
   j = j++;
b++;
      
     }
     System.out.println(j);
    }
}
结果:
j=0; 为什么结果是0??????????/
b=100; 

解决方案 »

  1.   

    j = j++;按照从右到左的运算顺序先进行 J++ 的运算即: j = j+1;
    此时 j == 1 但是 j++ (这个表达式)的值 仍为0 故而 j = j++  ===>   j = 0
    楼主可以好好看看  "表达式"的值 与 "变量"的值 的相关知识
      

  2.   

     j = j ++ 是先赋值的,所以 j 还是等于0哈!
      

  3.   

    /**
     * Hello world!
     *
     */
    public class CopyOfApp  
    {
      public static void main( String[] args )
      {
        
      int j=0;
      int b=0;
      for (int i = 0; i < 100; i++) {
      j = j++; //改成 j++; 就可以了
      b++;
        
      }
      System.out.println(j);
      }
    }
      

  4.   

    又是这种缺德代码,这个结果根本不能确定,换个java编译器可能就变了。
      

  5.   

    http://seiyatime.blog.sohu.com/84358295.html 看看这个链接吧,应该对你有帮助!我看了,但是还是不太明白!!
      

  6.   

    j++是先运算,在加1;下次循环 j还是0 应该是j=++j;就行了
      

  7.   

    10楼正解,被jvm优化了这里不是后++先使用后增值的问题,因为如果是那样的话,那么第一次执行过程应该是给j赋值0然后j还要自加,第一次之后j的值仍然是1;第二次就是把1赋给j,然后j自加编成2,这样最后j仍然会是100
      

  8.   

    还是再解释一遍吧,去找下java解惑上面的,有相关的研究
    j=j++;
    temp = j;
    j = j+1;
    j= temp;所以最后还是0
    这个java内部有关,具体请参考java解惑
      

  9.   


    public class CopyOfApp {
    public static void main(String[] args) {
    int j = 0;
    int b = 0;
    for (int i = 0; i < 100; i++) {   //i循環100次,
    j = j++;                     //每一次循環,j++等於0,賦值給j,然後j還是為0,之後又是一次循環。
    b++;
    }
    System.out.println(j);
    }
    }