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



按C语言中自增运算的理解,该程序最终应该打印出100。然而事实结果是0! 当时有点震惊,问了度娘好多人说是因为java的中间缓存变量机制,在经过自己理解后,确实如此,所以在此说所自己对改程序的理解。

Java 对自加是这样处理的 : 首先把j的值( 注意是值, 不是引用 ) 拷贝到一个临时变量区, 然后对变量j加 1,最后返回临时变量区的值。因为首先把j的值赋给缓存变量temp,所以就有了中间缓存变量机制这一说。 程序第一次循环是这样的:

第一步:jvm把j的值(j此时为0)拷贝到临时变量temp

第二步:j自加1(结果j=1)

第三步:返回临时变量temp的值0作为表达式j++的值

第四步:用表达式j++的值(也就是temp的值0)给j赋值所以经过循环后j的值仍然是0!因此打印结果是0!

其实也就是说java中进行自增运算的时候会创建一个临时变量,用来存储每次自增运算的结果。而不像C语言一样将自增结果写入原变量的内存。

如果把循环体改成j++,那么打印结果就是100了!

另一个例子x=++x+x++ 结果为12,同理即可理解