一.解读自增/自减
我们都知道了自增/自减的用法,我们来深度剖析一下
1.后++
int i = 1;
i = i++;
System.out.println(i); //1
/* 我们知道了结果,只是知其然,我们来解读一下
* 1)我们先把后面的i(i++中的i)装进空间: temp = i;
* 2)在单独对后面的i进行++操作: i = i + 1;
* 3)我们在把空间中的值给前面的i: i = temp;
* 操作完后i的值为1,不是2,应该知道是为什么了吧
2.前++
int j=1;
j = ++j;
System.out.println(j); //2
/* 一样的我们来解读一下
* 1)我们单独先对后面的j进行++操作: j = j + 1;
* 2)在把后面的j装进空间内: temp = j;
* 3)在把空间中的值给前面的j: j = temp;
* 操作完后j的值为2,而不是1.
3.效率问题
int i = 0;
i++;
i += 1;
i = i + 1;
/* 我们来解读一下这三种+1的方式哪种效率更高
* i++ >>> 1)获取i的地址 2)0000 0000 转化为 0000 0001
* i = i+1; >>> 1)获取i的地址 2)+1 3)赋值给左边的变量
* i += 1; >>> 1)获取i的地址 2)+1
*/
// 我们可以看到,在效率方便: i++ > i = i+1 > i += 1
二.自增/自减的运算和拼接
这个可能你会,但是你有的时候就会出错哈哈哈,不信我们看看:
int j=0,k = 0;
System.out.println(j + k++); //这里是0应该没问题吧
System.out.println(""+ j +++k); //猜猜这个结果是啥?
/* 1.执行顺序是从左到右的,字符串和整型运算是做拼接操作,
* 所以"" + j 为字符串的0
* 2.一样,第二个加号也为拼接"+" , +++运算参考上面的情况1
* 此时 k=0 "0"连接上0 == "00"
* 所以结果为 00 (字符串的)
*/
是不是一不注意就会出错?