让我们回顾一下相关知识:
自增(++):将变量的值加1,分前缀式(如++i)和后缀式(如i++)。前缀式是先加1再使用;后缀式是先使用再加1。
自减(--):将变量的值减1,分前缀式(如--i)和后缀式(如i--)。前缀式是先减1再使用;后缀式是先使用再减1。
自增与自减运算符还遵循以下规律:
1. 可以用于整数类型byte、short、int、long,浮点类型float、double,以及字符串类型char。
2. 在Java5.0及以上版本中,它们可以用于基本类型对应的包装器类Byte、Short、Integer、Long、Float、Double、Character。
3. 它们的运算结果的类型与被运算的变量的类型相同。
举个栗子:
int resultM = (++m)+(++m)+(++m);
第一次++m m已经等于11了
第二次++m m相当于11+1=12了
第三次++m m相当于12+1=13了
resultM =11+12+13=36
int resultN = (--n)+(--n)+(--n);
第一次--n n已经等于9了
第二次--n n相当于9-1=8了
第三次--n n相当于8-1=7了
resultN = 9+8+7=24
再来一个栗子
int a = 1;
b = a++;
问最终a和b是多少?
毫无疑问,答案是a = 2, b=1,但是其实这中间省略了一个步骤:临时变量的使用!什么意思呢?详细地可以这么理解:
①a++的运算特性决定了计算机需要先用一个临时变量来保存a运算之前的值,此时临时变量为1
②然后a自增加1,此时a为2
③最后把之前保存的临时变量复制给变量b,即b-1
用逻辑代码表示大意为:
int a = 1;
int temp = a;
a = a+1;
b = temp;
这样理解起来就是真正的详细运算原理。利用这个原理,有道面试题刚巧用到了这个。比如:
int a = 1;
a = a++;
问a最终为几?
如果按照百科上的说法 : a= a++会被拆分成
a = a;
a++;
最后a = 2; 然后这个结果是不对的,结果应该是a=1. 为什么呢?,因为按照我之前分析的三个步骤,实际上:
①temp = a ,此时temp =1
②a = a + 1 此时a = 2;
③ a = temp , 此时a又变回了1了,所以我们不难理解,最后结果为a=1
虽然此题比较简单,但是初学者很容易出现错误,基础不扎实的话很容易就掉进坑了,故在此记录,警示自己!