int j=0;
 
  for(int i=0;i<100;i++){
      j=j++;
  }
 
    out.println(j);// 0
    

解决方案 »

  1.   

    问题在于j=j++这句话实质上是这样的。
     j = j;
     j++;
      第一次运行时 j = 0++  此时J仍为0    第二次,第三次,一直循环下去所以直到最后J 仍为0
      

  2.   


    顶大胡子一个其实就是后置++的问题。先把 旧的 j的值赋给j然后再把旧的j+1
      

  3.   

    int j=0;
      
      for(int i=0;i<100;i++){
      j=++j;
      }
      
      System.out.println(j);// 100这样写就是你要的了
      

  4.   

    int j = 0;
    int k = 0;for (int i = 0; i < 100; i++) {
    k = j++;

    }out.println(k);
      

  5.   

    j++的运算过程是先将j的值附给j++这个实体,然后在对j进行+1运算。 
    这时的j=1,j++这个实体等于0。然后将j++的值附给j
    j这时候等于0、for循环了100次,因为每次循环前j=0,所以每次输出后的还是0。 
      

  6.   

    详细解释一下吧。用javap看一下字节码:j=j++这句的字码是这样的:    7:  iload_1  
        8:  iinc    1, 1  
        11: istore_1  
    先将 j 的值(0)压入到栈中, 然后再j+1。 再将栈中的值取出来赋给j
    也就是说j++ 等于无效
      

  7.   

    感觉越说越把楼主说糊涂了其实for循环,只是用来迷惑你的。 你把循环去掉就明白很多。j=j++ 右边是个j++的操作,而整个语句是个赋值语句。按照运算的优先级,肯定是右边先运算完,再赋值给左边的变量。    j++   他是一个独立表达式, 运算完j++后,这个表达式的值仍为0,但是j的值为1。然后再将右边表达式的值0赋给左边的j ,所以导致J 仍为0    至于为什么 j++ 结果是0列?  用我们总结的语句来说就是先赋值,再++ 所以整个表达式的值是0,但是J的值发生了改变。       
          7楼是从字节码的角度,解释了这一过程的内存的变化
       
      

  8.   


    public class Test {
    public static void main(String args[]) {
    int j = 0;
    for (int i = 0; i < 100; i++) {
     j=j++;
     //j = ++j;
     System.out.println("i="+i);// 0
     System.out.println("**********");// 0
     System.out.println("j="+j);// 0
    }
    System.out.println("j2="+j);// 0 }
    }
    i=0
    **********
    j=0
    i=1
    **********
    j=0
    i=2
    **********
    j=0
    i=3
    **********
    j=0
    i=4
    **********
    j=0
    i=5
    **********
    j=0
    i=6
    **********
    j=0
    i=7
    **********
    j=0
    i=8
    **********
    j=0
    i=9
    **********
    j=0
    i=10
    **********
    j=0
    i=11
    **********
    j=0
    i=12
    **********
    j=0
    i=13
    **********
    j=0
    i=14
    **********
    j=0
    i=15
    **********
    j=0
    i=16
    **********
    j=0
    i=17
    **********
    j=0
    i=18
    **********
    j=0
    i=19
    **********
    j=0
    i=20
    **********
    j=0
    i=21
    **********
    j=0
    i=22
    **********
    j=0
    i=23
    **********
    j=0
    i=24
    **********
    j=0
    i=25
    **********
    j=0
    i=26
    **********
    j=0
    i=27
    **********
    j=0
    i=28
    **********
    j=0
    i=29
    **********
    j=0
    i=30
    **********
    j=0
    i=31
    **********
    j=0
    i=32
    **********
    j=0
    i=33
    **********
    j=0
    i=34
    **********
    j=0
    i=35
    **********
    j=0
    i=36
    **********
    j=0
    i=37
    **********
    j=0
    i=38
    **********
    j=0
    i=39
    **********
    j=0
    i=40
    **********
    j=0
    i=41
    **********
    j=0
    i=42
    **********
    j=0
    i=43
    **********
    j=0
    i=44
    **********
    j=0
    i=45
    **********
    j=0
    i=46
    **********
    j=0
    i=47
    **********
    j=0
    i=48
    **********
    j=0
    i=49
    **********
    j=0
    i=50
    **********
    j=0
    i=51
    **********
    j=0
    i=52
    **********
    j=0
    i=53
    **********
    j=0
    i=54
    **********
    j=0
    i=55
    **********
    j=0
    i=56
    **********
    j=0
    i=57
    **********
    j=0
    i=58
    **********
    j=0
    i=59
    **********
    j=0
    i=60
    **********
    j=0
    i=61
    **********
    j=0
    i=62
    **********
    j=0
    i=63
    **********
    j=0
    i=64
    **********
    j=0
    i=65
    **********
    j=0
    i=66
    **********
    j=0
    i=67
    **********
    j=0
    i=68
    **********
    j=0
    i=69
    **********
    j=0
    i=70
    **********
    j=0
    i=71
    **********
    j=0
    i=72
    **********
    j=0
    i=73
    **********
    j=0
    i=74
    **********
    j=0
    i=75
    **********
    j=0
    i=76
    **********
    j=0
    i=77
    **********
    j=0
    i=78
    **********
    j=0
    i=79
    **********
    j=0
    i=80
    **********
    j=0
    i=81
    **********
    j=0
    i=82
    **********
    j=0
    i=83
    **********
    j=0
    i=84
    **********
    j=0
    i=85
    **********
    j=0
    i=86
    **********
    j=0
    i=87
    **********
    j=0
    i=88
    **********
    j=0
    i=89
    **********
    j=0
    i=90
    **********
    j=0
    i=91
    **********
    j=0
    i=92
    **********
    j=0
    i=93
    **********
    j=0
    i=94
    **********
    j=0
    i=95
    **********
    j=0
    i=96
    **********
    j=0
    i=97
    **********
    j=0
    i=98
    **********
    j=0
    i=99
    **********
    j=0
    j2=0
      

  9.   

    j= j++你换个形式来看  int  a = j++;
      j = a;相信你现在应该明白了吧。
      

  10.   

    int j=0;
      
      for(int i=0;i<100;i++){
      j++;
      }
      
      out.println(j);// 0
    这样你就能输出100了
      

  11.   

    小绵羊,你在这里装是吧?  皮痒痒?j=j++;
    右边其实是个独立语句,也就是说右边是个运算式子。这点明白不?
    j++; 他是一个独立的运算语句,没问题吧?整句话的意思就是: 将j++的值,赋给j
    既然如此,我们先定义一个变量int a  来接收j++的值
    int a = j++;如果你此时打印 a和j 的值,应该是a= 0;j=1;是吧?这点没问题吧? j++整个表达式的值为0,而j为1再将表达式的结果赋给a
    也就是j = a;  
    那么此时j是不是变为0了列?  也就是说其实j 的值,被覆盖了。
      

  12.   

    把问题看简单点:同样令j加1
    j++这个表达式返回的值是j
    ++j这个表达式返回的值才是j+1所以 j = j++;
    等价于 j = j;就这样~
      

  13.   


    大胡子,其实是先++后赋值的而且++后确实为1,但是赋值的时候初始变量覆盖了赋值结果,至于为什么我也没搞懂。public class Test {
    public static void main(String[] args) {

    int j=0;

    for (int i = 0; i < 100; i++) {
    j
    =
    j++;
    System.out.println(j);
    }
    System.out.println(j);
    }
    }断点一看就明白。但是为什么会被初始变量覆盖呢!或者可以理解为没有赋值成功。大家一起深入研究研究。
      

  14.   

    ++后,右边整个表达式的值是0,只不过是J的值变为了1你再执行= 操作。 是将0赋给了左边的J
     
    int a = j++;j = a;这都不懂?
      

  15.   

    感觉越说越把楼主说糊涂了其实for循环,只是用来迷惑你的。 你把循环去掉就明白很多。j=j++ 右边是个j++的操作,而整个语句是个赋值语句。按照运算的优先级,肯定是右边先运算完,再赋值给左边的变量。j++ 他是一个独立表达式, 运算完j++后,这个表达式的值仍为0,但是j的值为1。然后再将右边表达式的值0赋给左边的j ,所以导致J 仍为0j++{
     int temp = j;
     j=j+1;
    return temp;
    }