Java中的自增操作符与中间缓存变量机制

先来看一道很经典 的例题吧


求下列代码的输出:

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

输出为0. 不信? 读者可以自己去试试, 结果肯定是0. 书中给出的解释是: Java使用了中间缓存变量机制, 所以j = j++ 等价于 temp = j; j = j+1; j = temp;


我的火把呢?我要烧了这本书啊! 就这么简单的说等价于xxx就没了, 你至少解释下什么叫中间缓存变量机制吧. 不过, 至少书还告诉了我们关键词, 是时候展现真正的搜索技巧了!(笑)


Java在涉及自增运算符的运算中, 会采用中间缓存变量机制: 使用一个自增表达式的值的时候, 会创建一个临时变量来保存这个自增表达式的值, 使用完这个自增表达式的值之后, 这个被创建的临时变量就会被销毁. 

先看下面的两个等价

//后置自增的等价
num = j++;
等价于
temp = j;  //创建临时变量temp, 因为我们要使用的j++的表达式的值就是j的值, 故temp保存的自然是j
j = j+1;  
num = temp;//这里使用了自增表达式 j++的值(保存在temp的没有自加的j值), num = temp = j;


//前置自增的等价
num = ++j;
等价于
j = j + 1;  //因为对于自增表达式++j, 我们要使用的值就是j+1, 故会先进行自加
temp = j;   //同样会创建临时变量temp, 并将我们要使用的值(自加后的j)赋给临时变量
num = temp; //使用自增表达式 ++j的值(同样是保存在temp中的, 但是是自加后的j值)


有点晕? 先结合图示看看Java是怎么处理  num = i ++ 这一句的.


现在看看, 如果是 i = i ++ 会发生什么事情.


这就是一开始的例子中, 循环了99次之火, j 的输出依然为 0 的原因.


接着再看个例子巩固一下理解:

public static void main(String[] args){
     int i, sum1, sum2;
     
     i=0;
     sum1 = (i++)+(i++);
     System.out.println("sum1="+sum1);
     
     i = 0;
     sum2 = (++i)+(++i);
     System.out.println("sum2="+sum2);	 
}

输出为:


解析: 

对sum1 = (i++) + (i++) 我们用到了两个自增表达式的值, 前面说了, 由于中间缓存变量机制, Java会创建两个临时变量来保存这两个自增表达式要使用的值, 因此 sum = (temp1) + (temp2), 对temp1而言, 使用的值自然是i = 0, 把 0 赋给temp1, 然后 i 自增为1. 对temp2而言, 使用的值也是i, 此时为1,把1赋给temp2,  然后i自增为2 , 结果就是sum1 =  0 + 1 = 1.

对sum2同样, sum2 = (temp1) + (temp2), 对temp1而言,  使用的值是i+1, 先对i自增为1, 后把自增后的i 赋给temp1, 对temp2而言, 使用的值也是i+1, 先对i自增为2, 再把自增后的i赋给temp2, 结果就是 sum2 = 1 + 2 = 3.











基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值