先来看个题目
控制台输出值为多少
public static void main(String[] args) {
int j = 0;
for(int i =0;i<100;i++){
j= ++j;
}
System.out.println(j);
}
这题很简单j的值为100
那么下面这个呢
public static void main(String[] args) {
int j = 0;
for(int i =0;i<100;i++){
j= j++;
}
System.out.println(j);
}
这题的答案是:0
很奇怪是吧,为什么上面的是100,而下面的是0呢?这里就要引出java的中间缓存变量机制。
定义
java在进行自增运算时会运用中间缓存变量机制,引用一个中间的缓存变量来参与运算。我们都知道i++与++i的区别,i++会先进行运算再自增,而++i会先进性自增在进行运算
题目1中,循环的内容为j=++j,实际上在进行运算时,引入了一个中间缓存变量。我们暂时命名为temp
·j=j+1;//先自增
·temp=j;//中间缓存变量赋值为自增后的j
·j=temp;//temp赋值给j
因此题目一种的j是我们所期望的100
下面我们来看下题目2
题目2中,循环的内容为j=j++,同样的也引入了一个中间缓存变量。我们给它命名为temp
·temp=j//将j赋值给temnp
·j=j+1;//j自增
·j = temp;//将temp值赋值
在这里我们就不难发现,对于j=j++语句j永远是初始值,也就是。
网友评论