不简单的自增和自减运算符
自增(++)、自减(--)是Java非常重要的运算符,是一元算术运算符。
| 运算符 | 名称 | 说明 | 示例 |
| ++ | 自增 | 操作数的值+1 | a++或++a |
| -- | 自减 | 操作数的值-1 | a--或--a |
自增或自减,分为前缀和后缀,运算的顺序不一样。
1.自增
b=a++,表示a引用,再自增,即a先存放到系统操作栈里,然后赋值给b后,a再自增加1
b=++a,表示a先自增,再引用,即a先自增加1后,然后存放到系统操作栈里,赋值给b.
我们看一个示例:
public class Demo07 { public static void main(String[] args) { int a = 1; int b = a++; System.out.println(a); System.out.println(b); } }
运算结果 :

示例中b=a++,a先引用,放到系统的操作栈中,然后执行a++,a=a+1,所以a=2,那么b=a,b从操作栈中获取a的值为1,所以b为1.
我们在看下,b=++a的结果
public class Demo07 { public static void main(String[] args) { int a = 1; int b = ++a; System.out.println(a); System.out.println(b); } }
运行结果:

b=++a,按照运算规则,先自增,再引用赋值,所有a先自增,a=a+1,所以a=2,然后把a=2的值放到系统的操作栈中,然后执行赋值操作b=a,所以b=2。
同样,对于b=a--和b=--a也是如此。
我们看一个经典的示例:
public class Demo07 { public static void main(String[] args) { int a = 1; a = a++; System.out.println(a); } }
a的结果等于多少呢,有些人可能脱口而出是2,我们看下程序运行结果:

结果为1,而不是2,为什么?
这个涉及到JVM的处理机制,知乎上有一个大神对此阐述得非常详细,可以看下这篇文章:
https://zhuanlan.zhihu.com/p/103446936?utm_source=qq

浙公网安备 33010602011771号