中间缓存变量机制 i++

有一道经典的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++);
		}



当心内存溢出!


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

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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值