java i++和++i的区别_面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

写在前面:前些天看完了JVM的内存结构,自以为自己是懂了,心里想想不就是分线程共享和线程私有嘛,然后又怎么怎么分怎么怎么的嘛…

直到遇到了这道题目。说句实话,曾经自己做这种运算题目,完全是靠脑子空想,然后拿上笔颤抖的写下一个自己都不知道正不正确的答案。不过过了今天,我终于能确定它的答案了。

为此,我也专门写一篇博客,记录我的学习!!!

1、题目

package pers.mobian.questions01;public class test01 {    public static void main(String[] args) {        int i = 1;        i = i++;        int j = i++;        int k = i + ++i * i++;        System.out.println("i="+i);        System.out.println("j="+j);        System.out.println("k="+k);    }}

你能肯定并且准确的说出你的答案吗?

2、分析

在做这道题时我们的脑中要有对应的JVM内存结构。其中一个方法对应一个栈帧

e15df6a7929b4c763e982b56f3700278.png

此题目我们只需要用到栈帧里面的局部变量表和操作数栈

2.1、第一步

int i = 1

c0007f6d18dda7283fcd416f9c00ad9e.png

只是一个简单的赋值操作

2.2、第二步

i = i++

cb149809b44a5cc4913219c72f17f4d9.png

结果:i还是等于1

2.3、第三步

int j = i++

030aa96cc23794374d29380828f8cbe3.png

结果:i在局部变量表中变成了2,操作数栈中的 i 值为1,并且将 i 的值返回给 j,即此条语句以后,i = 2,j = 1

2.4、第四步

int k = i + ++i * i++

0a83237103f618d02d0f58e5f5e1c990.png

结果:局部变量表中的i = 4,k = 11

2.5、结果

c8c66ddcab7db1bec2b103b216ce8bf0.png

3、i = ++i

按理说根据上面的分析过程,再来分析 i = ++i,就很简单了。

我们的 i 变量先在局部变量表中进行自增,然后再将 i 进栈,然后再把栈中的数据返回给我们的变量 i 。

public class test02 {    public static void main(String[] args) {        int i = 1;        i = ++i;        System.out.println(i); // 结果:i = 2    }}

关于面试面试我还通过一些渠道整理了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、等初级,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

4ca81d8f7c1a9defe4e73b20c123954a.png
f7fe59555bccf41899d8b69a3b9f6761.png

需要资料的小伙伴,可以私信我发送:【电子书】然后自取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值