前言
2022 9/29 22:39
路漫漫其修远兮,吾将上下而求索
本文是根据尚硅谷学习所做笔记
仅供学习交流使用,转载注明出处
推荐
【尚硅谷经典Java面试题第一季(java面试精讲)-哔哩哔哩】
第一季:1自增变量
题目
如下代码的运行结果︰
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); }
结果
i=4 j=1 k=11
分析
public class Test1 { public static void main(String[]args){ int i = 1; i = i++; // ①把i的值1压入操作数栈1 // ②i变量自增1(在局部变量表中为2) // ③把操作数栈的值1赋给i为1 // 对应0-6 int j = i++; // ①把i的值1压入操作数栈1 // ②i变量自增1(在局部变量表中为2) // ③把操作数栈的值1赋给j为2 // 最后i更新为2 // 对应7-11 int k = i+ ++i* i++;//i=4 k=2+3*3 // ①把i的值2压入操作数栈为2 // ②i变量自增1(在局部变量表中为3) // ③把i的值3压入操作数栈为3 // ④把i的值3压入操作数栈为3 // ⑤i变量自增1(在局部变量表中为4) // ⑥把操作数栈中前两个(3,3,2)弹出来求乘积再压入栈(9,2) // ⑦把操作数栈的值(9,2)弹出求和再赋给k为12 // 最后i更新为4 // 对应12-23 System.out.println("i="+i);//4 System.out.println("j="+j);//2 System.out.println("k="+k);//11 } }
字节码文件
小结
- 赋值=,最后计算
- =右边的从左到右加载值依次压入操作数栈
- 实际先算哪个,看运算符优先级
- 自增、自减操作都是直接修改变量的值,不经过操作数栈
- 最后的赋值之前,临时结果也是存储在操作数栈中
- 建议: 《JVM虚拟机规范》关于指令的部分
最后
2022 9/29 22:57
p1
Markdown 1295 字数 107 行数
HTML 979 字数 67 段落