【118期】面试官——你真的清楚 i = i++和 i = ++i 的区别吗?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【118期】面试官——你真的清楚 i = i++和 i = ++i 的区别吗?

点击上方“Java面试题精选”,关注公众号

面试刷图,查缺补漏

号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅

阶段汇总集合:

写在前面:前些天看完了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内存结构。其中一个方法对应一个栈帧

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

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

2.1、第一步

int i = 1

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

只是一个简单的赋值操作

2.2、第二步

i = i++

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

结果:i还是等于1

2.3、第三步

int j = i++

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

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

2.4、第四步

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

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

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

2.5、结果

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

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语言

出处:blog.csdn.net/qq_44377709/article/details/106643703

与其在网上拼命找题?** 不如马上关注我们~**

【118期】面试官:你真的清楚 i = i++和 i = ++i 的区别吗?

原文始发于微信公众号(Java面试题精选):

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【118期】面试官——你真的清楚 i = i++和 i = ++i 的区别吗?


 上一篇
【117期】面试官——熟悉JVM吗?为什么新生代内存需要有两个Survivor区? 【117期】面试官——熟悉JVM吗?为什么新生代内存需要有两个Survivor区?
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅 阶段汇总集合: 在JVM的新生代内存中,为什么除了Eden区,还要设置两个Surviv
2021-04-05
下一篇 
【119期】谈谈在项目中,如何应对高并发流量 【119期】谈谈在项目中,如何应对高并发流量
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:****往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅 阶段汇总集合: 前言 应对大流量的一些思路 限流的常用方式 限流神器:G
2021-04-05