图解i++和++i,从底层搞懂它们的原理

本文通过实例和反编译源码详细解释了Java中i++和++i的区别。i++是先取值后计算,++i则是先计算后取值。通过分析局部变量表和操作数栈的工作方式,展示了它们在赋值时的不同处理,帮助读者理解这两个操作的底层原理。
摘要由CSDN通过智能技术生成

今天突然看到一个题,是有关于 i++、++i,对于他们的结果一直以来只是记住口诀,并不知道原理,使用起来也不那么顺畅。

i++:先取值,后计算
++i:先计算,后取值

若当题目仅仅是 i = i++;时,自己能迅速求出结果,但要是题目是 i = i + ++i + i++;的时候就有点头疼了,还很可能会搞错。

到底++计算过程是怎么样的呢,我于是就好奇了,到底他们是怎么实现的呢,今天就将它们的原理说一下。

图解i++和++i,从底层搞懂它们的原理



几个相关的考题

起因是突然看到了这几道题目,一瞬间自己居然不知道正确结果是什么,而且还要考虑很久,这一看就是 知其然,不知其所以然 的表现。

题目如下:

//第一题:
int i = 0;
i++;
System.out.println(i);

//第二题:
int j = 0;
j = j++;
System.out.println(j);

//第三题:
int n = 0++n;
System.out.println(n);
//n = ++n 和 n++ 的结果一样吗?

//最终考题:
int a = 1; 
a = a++; 
int b = a++; 
int c = a + ++a * a++; 
System.out.println("a="+a); 
System.out.println("b="+b); 
System.out.println("c="+c); 

你们知道这些题的答案吗,也会像我一样犹豫吗?没事,下面的文中我会告诉你它们的运算原理是什么,往下看。

i ++

首先公布第一题和第二题的答案。

//第一题:
int i = 0;
i++;
System.out.println(i);// 1

//第二题:
int j = 0;
j = j++;
System.out.println(j); // 0

这是为什么呢?都是i++,怎么结果却不一样。不多说,直接贴出反编译的源码,根据运行过程一步步来分析。源码先用javac xx.java进行编译,然后使用javap -v xxx.class可以反编译得到。

首先看看第一题反编译后的源码:

public static void main<
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值