学透java自增(++)自减(--)运算符

发布时间 2023-11-16 11:04:18作者: 努力工作,早日退休

基本介绍

自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。

它们都有前缀和后缀两种形式。

前缀就是++在前面,后缀就是++在

前缀先自增(减),后缀后自增(减)

前缀形式的运算规则可以概括为:“先自增(减),后引用”,如 ++a

后缀形式的运算规则可以概括为:“先引用,后自增(减)”,如 a++。

这里所说的“引用”,指的是使用变量的值,将值放入操作栈的动作。

另外,我们还要强调一个细节:无论是前缀形式还是后缀形式,自增自减运算符的优先级要 > 赋值运算符。

一、仅有++或--

 1 public class Test1 {
 2 
 3     public static void main(String[] args) {
 4         int a=2;
 5         a++;
 6         System.out.println(a);//输出3
 7         int b=2;
 8         ++b;
 9         System.out.println(b);//输出3
10     }
11 }

可以看到,当仅做++或--时,不管是后缀式a++,还是前缀式++b,输出的结果都是一样的。因为仅自身++或--,并不会有“引用”,也就是不会有操作栈的动作。

二、++或--运算结果赋值给其他变量

 1 public class Test1 {
 2 
 3     public static void main(String[] args) {
 4         int a=2;
 5         int b=a++;
 6         System.out.println(a);//输出3
 7         System.out.println(b);//输出2
 8         int c=2;
 9         int d=++c;
10         System.out.println(c);//输出3
11         System.out.println(d);//输出3
12     }
13 }

当有赋值或加减等操作时,就会用到操作栈。

a=2  b=a++ 是后缀式,“先引用,后自增(减)”

第①步:先把a的值2,放入操作栈

第②步:a再自增变成3

第③步:将操作栈里的值2赋值给b

c=2  d=++c 是前缀式,“先自增(减),后引用”

第①步:c先自增变成3

第②步:再把c的值3,放入操作栈

第③步:将操作栈里的值3赋值给b

 

再来看下运算后再赋值的

1 public class Test1 {
2 
3     public static void main(String[] args) {
4         int a=2;
5         int b=++a + ++a;
6         System.out.println(a);//输出4
7         System.out.println(b);//输出7
8     }
9 }

++a 是前缀式,“先自增(减),后引用”

第①步:a先自增变成3

第②步:再把a的值3,放入操作栈1

第③步:a再自增变成4

第④步:再把a的值4,放入操作栈2

第⑤步:把操作栈1中的数据3和操作栈2中的数据4相加,赋值给b

 

1 public class Test1 {
2 
3     public static void main(String[] args) {
4         int a=2;
5         int b=++a + a++;
6         System.out.println(a);//输出4
7         System.out.println(b);//输出6
8     }
9 }

和上面相比,a++ 是后缀式,“先引用,后自增(减)”

就是上面第③步和第④步互换,先将a的值3放入操作栈2,所以输出的是3+3=6。

三、++或--运算结果赋值给自身

 1 public class Test1 {
 2 
 3     public static void main(String[] args) {
 4         int a=2;
 5         a=++a;
 6         System.out.println(a);//输出3
 7         int b=2;
 8         b=b++;
 9         System.out.println(b);//输出2
10     }
11 }

++a 是前缀式,“先自增(减),后引用”,所以是先自增为3,再把3放入操作栈,最后把操作栈中的3赋值给a。

b++ 是后缀式,“先引用,后自增(减)”,所以是先将b的值2放入操作栈,再自增为3,最后把操作栈中的2赋值给b。

 

再看个复合赋值运算+=

当语句中以复合赋值运算符给变量赋值的时候,计算机会先把复合赋值运算符左边变量的值存入操作数栈。

1 public class Test1 {
2 
3     public static void main(String[] args) {
4         int a=2;
5         a+=++a + ++a;
6         System.out.println(a);//输出9
7     }
8 }

前面已经讲到,++a + ++a的值为7,计算机先把a的值2放入操作栈1,再把右边的计算结果存入操作数栈2,最后把操作数栈1和操作数栈2中的数值相加,赋值给a,所以是2+7=9。