美文网首页
面试细节: i = i++和 i = ++i

面试细节: i = i++和 i = ++i

作者: hahaxiixxsd | 来源:发表于2020-07-04 10:09 被阅读0次

作者:默辩

来源:https://blog.csdn.net/qq_44377709/article/details/106643703

一般来说,这个类题,可能会出现在笔试题,还是很高频的~

如果面试官真的问了,那这个问题还是很细节的,一起看下文吧~

终于弄明白 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内存结构。其中一个方法对应一个栈帧

image

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

2.1、第一步

int i = 1
image

只是一个简单的赋值操作

2.2、第二步

i = I++
image

结果:i还是等于1

2.3、第三步

int j = I++
image

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

2.4、第四步

int k = i + ++i * I++
image

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

2.5、结果

image

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

相关文章

  • 面试细节: i = i++和 i = ++i

    作者:默辩 来源:https://blog.csdn.net/qq_44377709/article/detail...

  • Java中的i++ 和 ++i 在for循环使用

    Java的i++ 和++i 的区别i++:先赋值,后计算;++i;先计算,后赋值。 for循环中的i++和++i...

  • i++和++i

    i++ 先赋值后相加 //结果65 ++i 先自加后赋值 //结果66

  • ++i和i++

    ++i和i++ 如果是自身使用,没有任何区别。 使用后再进行赋值时有区别: 前加:先自身+1再把结果赋值给...

  • i++和++i

    java场景一 打印结果: i: 0 j: 1 java场景二 打印结果: i: 0 j: 1

  • ++i和i++

    1.a = i++; 等校为 a = i; i = i + 1; 2.a = ++i; 等校为 i = i ...

  • 经典面试题:i=i++和i=++i

    问题 输出的值: 分析 1. 要谈论这个问题首先要了解内存结构,因为计算是在操作数栈中进行的 局部变量表a). 存...

  • C语言:乱

    ++i 和 i++ 的作用相当于 i=i+1。但是 ++i 和 i++ 的不同之处在于 ++i 是先执行 i=i+...

  • 自增、赋值运算符

    1.自增 int i = 3; int a = i++ + i++ + i++;//第①个i++表达是值为3,i=...

  • i++和++i的区别

    i++和++i有哪些区别? i++和++i都是实现变量i的自增,两者的区别在于i++是先运算,再加1,而++i是先...

网友评论

      本文标题:面试细节: i = i++和 i = ++i

      本文链接:https://www.haomeiwen.com/subject/kmoyqktx.html