i = i++的参考资料

转载自:http://blog.sina.com.cn/s/blog_5d53923e0101bz8p.html

记得大学刚开始学C语言时,老师就说:自增有两种形式,分别是i++和++i,i++表示的是先赋值后加1,++i是先加1后赋值,这样理解了很多年也没出现问题,直到遇到如下代码,我才怀疑我的理解是不是错了:

public class Client {  public static void main(String[] args) {  int count =0;  for(int i=0;i<10;i++){  countcount=count++;  }  System.out.println("count="+count);  }  } 这个程序输出的count等于几?是count自加10次吗?答案等于10?可以非常肯定地告诉你,答案错误!运行结果是count等于0。为什么呢? count++是一个表达式,是有返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。程序第一次循环时的详细处理步骤如下: 步骤1 JVM把count值(其值是0)拷贝到临时变量区。 步骤2 count值加1,这时候count的值是1。 步骤3 返回临时变量区的值,注意这个值是0,没修改过。 步骤4 返回值赋值给count,此时count值被重置成0。

“countcount=count++”这条语句可以按照如下代码来理解:  public static int mockAdd(int count){  //先保存初始值  int temp =count;  //做自增操作  countcount = count+1;  //返回原始值  return temp;  } 于是第一次循环后count的值还是0,其他9次的循环也是一样的,最终你会发现count的值始终没有改变,仍然保持着最初的状态。 此例中代码作者的本意是希望count自增,所以想当然地认为赋值给自身就成了,不曾想掉到Java自增的陷阱中了。解决方法很简单,只要把 “count=count++”修改为“count++”即可。该问题在不同的语言环境有不同的实现: C++中“count=count++”与“count++”是等效的,而在PHP中则保持着与Java相同的处理方式。每种语言对自增的实现方式各不 同,读者有兴趣可以多找几种语言测试一下,思考一下原理。 下次如果看到某人T恤上印着“i=i++”,千万不要鄙视他,记住,能够以不同的语言解释清楚这句话的人绝对不简单,应该表现出“如滔滔江水”般的敬仰,心理默念着“高人,绝世高人哪”。

时间: 2024-11-08 03:32:18

i = i++的参考资料的相关文章

《宗庆后:万有引力原理》:娃哈哈官方口径,可以作为了解娃哈哈及其相关领域的重要参考资料。三星推荐

从宗庆后的父母写起.作者是专职作家,讲故事水平没的说,但是书中关于商业领域的分析概括则有所欠缺.另外,书中当然只会讲娃哈哈愿意讲给读者听的故事.娃哈哈口服液.非常可乐为什么逐渐淡出市场之类的事情,书中自然是避而不谈. 想了解娃哈哈这个中国知名品牌的故事,这本书应该还是比较重要的参考资料. 下面是书中的一些重要的信息的摘抄: 1:宗庆后在绍兴茶场干了14年,种过茶.割过稻.喂过猪,每月工资28元,加上马目农场的一年,15年总共得到了5000块钱左右的工资:#743 2:1978年,因为学历不够,宗

CQRS及.NET中的参考资料

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:CQRS作为一种设计模式,其实一点都不新鲜了.不过今天有朋友感叹.NET朋友也关注CQRS,才打算把之前看到的一些.NET下的CQRS参考资料分享下. 命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型状态的命令和模型状态的查询实现分离.这一模式最早由Greg Young在一次InfoQ的采

yarn参考资料汇总

1.YARN或将成为Hadoop新发力点 http://www.csdn.net/article/2013-06-27/2816031-hadoop-yarn 2.更快.更强——解析Hadoop新一代MapReduce框架Yarn http://www.csdn.net/article/2014-02-10/2818355 yarn参考资料汇总,布布扣,bubuko.com

【数据可视化 参考资料】

数据挖掘:用可视化效果展现你的数据 [编者按]本文作者星河里的章鱼喵,文章通过介绍Visualization 即可视化,罗列了数据的展现方式.对于数据分析最困难的一部分就是数据的展示,解读数据之间的关系,清晰有效的传达并且沟通数据信息. 对于数据挖掘,我们可以通过文中对数据可视化的案例找到分析数据.展现数据的方法和思路. Data visualization 是一件很有趣的事情.最近在尝试处理数据,便顺手翻了翻 visualization 的进展,然后除了 IBM 大名鼎鼎的的 many-eye

SQLite学习第01天:参考资料

今天开始学习数据库相关的知识,由于本人从事的是嵌入式软件开发方向,所以在数据库的选择时就果断选择了SQLite,在网上搜索了一下相关的资料并且配置好了环境.首先,想要对SQLite有一个基本的了解还是需要阅读官网上面的内容: 官网链接:http://www.sqlite.org/index.html 在官网上面提供了很多文档,有很基础的,写的很容易理解,我也大致看了一下.然后,我想选择要给很基础的快速入门的教程,于是搜索了半天,找到了一个很好的在线学习资料,链接地址如下: http://www.

ACM学习参考资料

ACM学习参考资料 各种图论模型及其解答

JVM调优总结(十二)-参考资料

能整理出上面一些东西,也是因为站在巨人的肩上.下面是一些参考资料,供大家学习,大家有更好的,可以继续完善:) · Java 理论与实践: 垃圾收集简史 · Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning · Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Mem

烟花散尽漫说无(参考资料)

烟花散尽漫说无 --试解李商隐<锦瑟>"沧海月明珠有泪,蓝田日暖玉生烟."句 参考资料 在梳理索解史以及解诗时主要参考了以下资料(清以前的不列): X<朱自清全集>第二卷 ("<唐诗三百首>指导大概") 朱自清著江苏人民出版社 1988年8月第1版,1990年5月第2刷 <李商隐诗选注>陈伯海 选注 上海古籍出版社 1982年2月第1版/第1刷 <唐诗三百首全译>汉灵娜 译诗 何年 注释 陈敬容 校订 贵州

iOS 学习参考资料

iOS 学习参考资料 ios 编程语言 Programming with Objective-C: About Objective-C : Apple 撰写的一份关于 Objective-C 2.0 的一份文档,这也算是学习 iOS/Mac 开发必读的一份文档,记得我当初看的时候是叫做 The Objective-C Programming Language. Learn Objective-C :这也是广受推荐的一份文档,短小精练,适合入门. Programming in Objective-

最大化 AIX 上的 Java 性能,第 5 部分: 参考资料和结论

http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf5.html 最大化 AIX 上的 Java 性能,第 5 部分: 参考资料和结论 这是由五个部分组成的系列的结束部分,此系列提供了相关技巧和技术,这些技巧和技术通常用于优化 Java™ 应用程序,以便在 AIX® 上实现最佳的性能.我们将讨论 AIX 上的 Java 性能优化的其他有趣方面,并查看几个案例研究,然后通过有用的参考资料列表结束此系列. 查