前言
Java继承自C++,因而将很多C++中存在的运算符直接照搬过来了。自增(++)与自减(–)就是其中之一。本篇尝试探讨这两个运算符衍生出的负面问题,以及它们是否有存在的必要。
自增与自减
定义
顾名思义,自增就是自己给自己加1,自减则是自己给自己减1.所以
i++;
等价于
i = i +1;
前置与后置
前置
a = ++i;
后置
a = i++;
两者区别是,前置先运算后取值,后置先取值后运算。也就是说:
a = ++i;
等价于
i = i +1;
a = i;
而
a = i++;
等价于
a = i;
i = i +1;
这样看来,一个运算符减少了一行代码,真是提升了编码效率。可是,我们付出了什么代价?
偷懒一行代码带来的痛苦
考虑下面一段代码的输出:
扫描二维码关注公众号,回复:
9595456 查看本文章
int i = 0;
printf(“%d, %d”,++i,i++);
稍谨慎的开发者通常需要犹豫。这涉及到函数参数的求值顺序。在有的编译系统中是从左到右求值,所以输出是1,1;在有的编译系统是从右到左求值,所以输出是2,0.
一段代码如果别人很难看懂,通常不是因为这段代码很高明,而是代码质量很低劣。
从这个角度说,自增自减运算符虽然使代码看上去简洁,却增加了产生低劣代码的可能。仅仅为了少写一行代码,这样做值得吗?