首页 > 代码库 > 【java解惑】前缀自增自减和后缀自增自减问题
【java解惑】前缀自增自减和后缀自增自减问题
如下代码:
public class Example025 { public static void main(String[] 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 = " + ape); System.out.println("it = " + it); // error System.out.println("ape_it = " + ape_it); } }
输出结果:
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;//再赋值
通过以上代码可以清楚地理解it的值没有变化的原因了。更深层的了解可以参考文章http://my.oschina.net/0x0001/blog/168968。从这里得到的经验就是:不要在单个表达式中对同一变量赋值超过一次。
(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
【java解惑】前缀自增自减和后缀自增自减问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。