标签:前缀 后缀 自增减 赋值
如下代码:
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” 博客,谢绝转载!
标签:前缀 后缀 自增减 赋值
原文地址:http://imu2008.blog.51cto.com/3844842/1598308