Java中"++"自增赋号运算符深入理解

Java中"="自增赋号运算符深入理解

让我们先来看一段代码:

int i = 0 ;
int j = i++;
System.out.println(i);

这个结果大家都知道是:

0

那么我们换一种写法:

int i =0;
i = i++;
System.out.println(i);

大家第一反应是不是以为运算结果还是 1 ?
其实答案是:

0

大家肯定会有疑问 为什么呢?

第一种理解方式

其实大家在"=“号的理解是
右边的值赋值给左边
但是其实”="的真正理解是:
将右边的运算结果赋值给左边
这两句话看似差不多,其实意思差很多

让我们先来看看

int i = 0;
i = i ++;

这两句当中Java做了什么事情

public static void main(String[] args){
    int i = 0;
    byte var10000 = i;
    int var2 = i + 1;
    i = var10000;
    System.out.println(i);
}

从源码中我们可以看见其实
i++
并不是直接赋值给了
i
而是通过两个中间量进行了运算
i + 1 的值其实赋给了var2临时变量
而 i = var10000临时变量
并且 var10000临时变量的值就等于 i 等于 0
所以这也就是什么

i = i ++ 

i = 0

第二种更加深入的理解方式

通过字节码我们看见这么几行数据:

在这里插入图片描述
LocalVariableTable : 本地变量表 (栈空间在压栈的时候,会将本地变量表压进去)
Strat :起始位置
Length :有效范围
Slot : 凹槽 (类似数组的两个索引)
Name : 本地变量的名称
Singature : 类型(I=int)

在这里插入图片描述
通过字节码,我们就看出来代码在执行期间,栈做了什么事情
也解释了i为什么是0
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值