专栏名称: Java专栏
一个Java、Python、数据库、中间件、业内资讯、面试、学习资源等干货的知识分享社区。
目录
51好读  ›  专栏  ›  Java专栏

终于弄明白 i = i++和 i = ++i 了

Java专栏  · 公众号  ·  · 2020-12-24 12:20

正文



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

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


2.1、第一步

int i = 1

只是一个简单的赋值操作


2.2、第二步

i = i++

结果:i还是等于1


2.3、第三步

int j = i++







请到「今天看啥」查看全文