【java解惑】前缀自增自减和后缀自增自减问题
2015-11-04 08:41
253 查看
如下代码:
(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
args) { int ape = 100; int it = 100; int ape_it = 100; for (int i = 0; i < 100; i++) { ape--; it = it--; ape_it = --ape_it; } System.out.println("ape = ] 输出结果:通过以上代码可以清楚地理解it的值没有变化的原因了。更深层的了解可以参考文章/article/3533537.html。从这里得到的经验就是:不要在单个表达式中对同一变量赋值超过一次。ape = 0 it = 100 ape_it = 0
原因分析:
对于ape的输出应该是没有异议的。但是it的值为什么还是100呢,ape_it的值为什么又是0。先说ape_it:在循环中,ape_it先自减,然后赋值,其实的这里的赋值是没有意义的,所以输出是0。
it的赋值过程就比较麻烦。首先,取it的值,然后it自减,然后赋值。赋值在自减之后,但是赋的值是自减之前的值。这个过程,it自减的后的值没有起任何作用。“it=it--;”可以使用以下更形象的代码表示:
int tmp = it; //取值
it = it-1;//减一
it = tmp;//再赋值
(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
相关文章推荐
- 【java解惑】无处不在的bug
- 【java解惑】java字符串替换方法使用
- 【java解惑】字符串的字节数组构造函数使用
- 【java解惑】Unicode转义字符的使用(续)
- 【java解惑】Unicode转义符的使用
- 【java解惑】java字符串比较那些事儿
- 【java解惑】复合赋值与简单赋值
- 【java解惑】条件表达式结果类型规则
- 【java解惑】多重强转引发的问题
- 【java解惑】十六进制加法问题
- 【java解惑】长整数计算防止溢出
- 【java解惑】使用double进行小数运算
- Eclipse编译时Cannot run program &quot;make&quot;:?????
- Eclipse调试之内存视图原理解析:调试开发者指南
- java基础学习(一)
- java基础学习(一)
- Java中的堆和栈的区别
- Java类的访问权限
- JAVA多线程之常用方法
- 复习javaIO 之File类