【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” 博客,谢绝转载!

你可能感兴趣的:(赋值,前缀,后缀,自增减)