天天看点

JAVA中b = a++ 与 b = ++a 的底层实现过程

在JAVA中,或者说在所以的编程语言中

int a = 10, b;
           

然后

b = a++;

简单可以理解为,把a先赋给b,即

b = a;

然后 a自身在来加1, 即

a = a+1;

这样

a = 11, b = 10

底层它是这样子的:

在内存中 开辟了 a = 10的内存, 还有b的内存

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

这时如果 执行

b = a++

就相当先开辟一个临时内存 把 变量a的值放进去,防止变量a进行改变

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

然后在内存里面 把 临时内存 + 1

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

接着把加完之后的值,赋回到变量a

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

这样a就变成了 11

最后再把临时内存里面的值,赋给变量b

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

这样就变成了

JAVA中b = a++ 与 b = ++a 的底层实现过程

这就是

b = a++;

在底层的过程.

.

.

.

int a = 10, b;
           

如果

b = ++a

简单可以理解为 a先自身加1 即

a = a +1;

然后再把 a 赋值 给 b, 即

b = a;

这样

a = 11, b = 11

总得来说其实过程和 b = a++差不多,只是最后一步不是把 临时变量 给 b

而是 把 自增后的变量 a 给 b

底层它是这样子的:

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

这时如果 执行

b = ++a

就相当先开辟一个临时内存 把 变量a的值放进去,防止变量a进行改变

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

然后在内存里面 把 临时内存 + 1

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

接着把加完之后的值,赋回到变量a

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

最后是把 变量a+1之后 的值赋给b

即:

JAVA中b = a++ 与 b = ++a 的底层实现过程

这样就变成了

JAVA中b = a++ 与 b = ++a 的底层实现过程

这就是

b = a++;

在底层的过程.

如果

int i = 5;

然后执行

i = i++;

这个按照底层执行的话,

i = 6

, 然后又被临时内存 5 覆盖掉

所以如果输出的话

i = 5;

可以按照上面画图的步骤试一下

自增是这样实现的,自减也同样是这样的过程实现的.