JavaSE面试题:自增变量
来源:https://runwsh.com/

  • 代码
    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);
    }
  • 现在,让我们逐行解释这段代码的执行

1. int i = 1;:创建整数变量 i 并将其初始化为1。(i=1;)

2. i = i++;:这是一个有争议的表达式。首先,它将 i 的当前值1压栈到一个操作数栈中。然后,它将 i 自增1,这就使得变量i=2了,但右边的操作数栈不是没有后续的逻辑运算了,就会将之前压到操作数栈的1赋值给i。所以,i 的值又变为了1。(i=1;)


**3.** `int j = i++;`:将 i 的当前值1赋给 j,然后将 i 自增1。所以,j 的值是1,而 i 的值变为2。(i=2;j=1)

打印结果:

i=4
j=1
k=11

小结

    1. 赋值=,最后计算
    1. =右边的从左到右加载值依次压入操作数栈
    1. 实际先算哪个,看运算符优先级
    1. 自增、自减操作都是直接修改变量的值,不经过操作数栈
    1. 最后的赋值之前,临时结果也是存储在操作数栈中
建议:《JVM虚拟机规范》关于指令的部分

https://www.mianshi.online

https://www.i9code.cn

原文链接:https://www.cnblogs.com/runwsh/p/JavaInterview01.html

本文由博客一文多发平台 OpenWrite 发布!

逃跑的眼镜_bvbEK5
7 声望0 粉丝