首页 > 编程语言 >第一季:1自增变量【Java面试题】

第一季:1自增变量【Java面试题】

时间:2022-10-03 12:09:37浏览次数:73  
标签:操作数 Java 压入 ++ 面试题 System println 自增


第一季:1自增变量【Java面试题】

前言


2022 9/29 22:39

路漫漫其修远兮,吾将上下而求索


本文是根据尚硅谷学习所做笔记

仅供学习交流使用,转载注明出处


推荐

​【尚硅谷经典Java面试题第一季(java面试精讲)-哔哩哔哩】​

​尚硅谷经典Java面试题一二三季​

​尚硅谷经典Java面试题(第1季)​

第一季: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
}
}

字节码文件

第一季:1自增变量【Java面试题】_面试

小结

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

最后


2022 9/29 22:57


p1


Markdown 1295 字数 107 行数
HTML 979 字数 67 段落



标签:操作数,Java,压入,++,面试题,System,println,自增
From: https://blog.51cto.com/u_15719556/5730026

相关文章