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
小结
- 赋值=,最后计算
- =右边的从左到右加载值依次压入操作数栈
- 实际先算哪个,看运算符优先级
- 自增、自减操作都是直接修改变量的值,不经过操作数栈
- 最后的赋值之前,临时结果也是存储在操作数栈中
建议:《JVM虚拟机规范》关于指令的部分
原文链接:https://www.cnblogs.com/runwsh/p/JavaInterview01.html
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。