中间缓存变量机制 i++

来源:互联网 发布:网络中文教师招聘 编辑:程序博客网 时间:2024/05/16 06:42

有一道经典的i++例题,内容如下:


这里使用的中间缓存机制虽然给出了解释,但还是不容易理解。在网上找了一些其他人的解释:


因为在计算过程中,使用了Java中间变量缓存机制。在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。
 
即 method_1方法中的
[java] view plaincopyprint?
j = j++;  
 
等同于:
[java] view plaincopyprint?
int temp = j;  
j = j + 1;  
j = temp;  
 
method_2方法中的
 
[java] view plaincopyprint?
j = ++j;  
等同于:
 
[java] view plaincopyprint?
j = j + 1;  
int temp = j;  
j = temp;

看了这个解释算是比较清晰,但是觉得其中 运算两边都是用了j,容易让人迷惑。所以我换了一种方式来描述这个问题:


这里把左边的j换成变量a

a = j++;   //大家都知道j++ 是先使用,后自加。那究竟如何理解呢?

上面的语句等同于:
int temp = j;   //这里就是所谓的先使用,既先把j赋值给临时变量temp
j = j + 1;      //在自加,  j 本身自增了1
a = temp;       //将temp赋值a
 
通过以上过程既实现了先使用后自加

method_2方法中的
 

a = ++j;   //先自加再使用

等同于:
 
j = j + 1;  //先自加  
int temp = j;  //在使用
a = temp;   


到这里我想你应该明白了两个问题:1.什么是中间缓存变量机制 2.为什么java要使用中间缓存变量机制




最后留一个简单的问题,请大家思考,帮助大家深入理解。请问下面四段代码的执行结果:

for (int i = 0; i < 2; ) {System.out.println(i++);}for (int i = 0; i < 2; ) {System.out.println(++i);}for (int i = 0; i < 2; ) {System.out.println(i=++i);}for (int i = 0; i < 2; ) {System.out.println(i=i++);}



当心内存溢出!


希望你能有所收获,如果还没有理解,建议反复看几遍。自己动手实验一下。

感谢其他朋友的分享,也希望能给大家带来帮助,欢迎讨论指导!

原创粉丝点击