您的位置:首页 > 编程语言 > Java开发

【java解惑】前缀自增自减和后缀自增自减问题

2015-11-04 08:41 253 查看
如下代码:
 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 = 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的值没有变化的原因了。更深层的了解可以参考文章/article/3533537.html。从这里得到的经验就是:不要在单个表达式中对同一变量赋值超过一次。

(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse

本文出自 “winger” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: