文章目录
1、题目
2、分析
2.1、第一步
2.2、第二步
2.3、第三步
2.4、第四步
2.5、结果
3、i = ++i
1、题目
package pers.mobian.questions01;
public class test01 {
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
2
3
4
5
6
7
8
9
10
11
12
13
你能肯定并且准确的说出你的答案吗?
2、分析
在做这道题时我们的脑中要有对应的JVM内存结构。其中一个方法对应一个栈帧
此题目我们只需要用到栈帧里面的局部变量表和操作数栈
2.1、第一步
int i = 1
只是一个简单的赋值操作
2.2、第二步
i = i++
结果:i还是等于1
2.3、第三步
int j = i++
结果:i在局部变量表中变成了2,操作数栈中的 i 值为1,并且将 i 的值返回给 j,即此条语句以后,i = 2,j = 1
2.4、第四步
int k = i + ++i * i++
结果:局部变量表中的i = 4,k = 11
2.5、结果
3、i = ++i
按理说根据上面的分析过程,再来分析 i = ++i,就很简单了。
我们的 i 变量先在局部变量表中进行自增,然后再将 i 进栈,然后再把栈中的数据返回给我们的变量 i 。
public class test02 {
public static void main(String[] args) {
int i = 1;
i = ++i;
System.out.println(i); // 结果:i = 2
}
}
1
2
3
4
5
6
7
注意:除了i++问题。在此赠送一套最新Java架构项目实战教程+大厂面试题库,想学的 点击此处 免费获取,小白勿进哦
————————————————
版权声明:本文为CSDN博主「默辨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44377709/article/details/106643703