java中间缓存变量机制

废话不说,直接看例子

1 public class Test3 {
2     public static void main(String[] args) {
3         int j =0 ;
4         for(int i =0 ;i<100;i++){
5             j=++j;
6         }
7         System.out.println(j);
8     }
9 }
输出结果是 100

j = ++j;
即为:
  j = j + 1;
  temp = j;
  j = temp
public class Test3 {
    public static void main(String[] args) {
        int j =0 ;
        for(int i =0 ;i<100;i++){
            j=j++;
        }
        System.out.println(j);
    }
}

//输出结果为0

过程为:
  temp = j;
  j= j+1;
  j= temp;

 

为什么会出现这两种不同的情况呢?

  (1)是因为java使用了中间变量缓存机制,在执行自增运算的时候,会为每个自增操作分配一个临时变量。如果是前缀加(++i)会先自加1后赋值(给临时变量),如果是后缀加(i++),就会先赋值后加1,运算最终使用的并不是变量本身,而是被赋了值的临时变量。

  (2)j=j++可以分解为赋值和自增两个操作:读出一个值到缓存,将值赋给变量,所以我们要完成三次操作:

  temp = j;(读取变量j到缓存)

  j = j + 1;(改变变量j的值为缓存值,改变变量j的值为1)

  j = temp;(直接读取的值为缓存之0),所以本题读取的值最终是0.

  

posted @ 2019-03-07 10:00  stone1234567890  阅读(804)  评论(0编辑  收藏  举报