# 1-第一季-01_尚硅谷_JavaSE面试题:自增变量-2021-03-04
# ❤ 面试题

## 1、自测结果(错误!)
i = 1 --> 2 --> 4
j = 3
k = 4 + 3*3 = 13
### 1.1、自测结果(知道 i 值后的自测)(正确!)
int i = **1 --> 2 --> 1** --> 2 --> 3 --> 4
int j = 1 (重点:需要注意 i++ 为用后加)
int k = 2 + 3*3 = 11
## 2、运行结果

# 一、面试题解析:i = i++
## 1、 执行过程
- ① 把 i 的值压入操作数栈
- ② i 变量自增1**(重点:自增1是在局部变量表中进行的!)**
- ③ 把操作数栈中的值赋值给 i**(重点:赋值过程为操作数栈的值覆盖局部变量表中的值的过程???!!!)**



## 2、字节码角度分析

## 3、细节说明:i = i++
- 同时在**局部变量表**和**操作数栈**中存在 i 。
- i++ 是在**局部变量表**中执行的!!!!
- 赋值操作会使得操作数栈的 i 值,**覆盖**局部变量表中的 i 值。(关键点:覆盖)
- 另外注意:i ++ 是用后加
# 二、面试题解析:int j = i++
## 1、 执行过程
- ① 把 i 的值压入操作数栈
- ② i 变量自增1
- ③ 把操作数栈中的值赋值给 j



## 2、字节码角度分析

# 三、面试题解析:int k = i + ++i * i++
## 1、 执行过程
- ① 把 i 的值压入操作数栈
- ② i 变量自增1
- ③ 把 i 的值压入操作数栈
- ④ 把 i 的值压入操作数栈
- ⑤ i 变量自增
- ⑥ 把操作数栈中前两个弹出求乘积结果再压入栈
- ⑦ 把操作数栈中的值弹出求和再赋值给 k







## 2、字节码角度分析

# 四、小结

---
# ☀ 课堂小测
- 回答上述面试题。
- **i = i++ ** 字节码和执行过程?细节说明?
- **int j = i++** 字节码和执行过程?
- **int k = i + ++i * i++** 字节码和执行过程?
- 自增变量的运算小结?
网友评论