笔试高频:关于 自增变量 的那些事儿
程序员文章站
2022-07-08 17:59:44
以一例引入:请看如下几行代码:public class IIncred {//代码运行结果: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);}}请输出运行结果?...
以一例引入:
请看如下几行代码:
public class IIncred {
//代码运行结果:
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=i++;
从右往左,操作i++,++要后算,所以首先将局部变量表
中的1压入操作数栈,之后局部变量表中的1进行自增到2(自增自减在局部变量表中操作,最后会把操作数栈中的1赋值给局部变量表中的2,将2覆盖掉,所以结果还是1.
第二步:
int j=i++;
先赋值,后自增。
第三步:
int j=i++;
先将局部变量表中的i压入操作数栈里,++i自增,局部变量表中i变为3,操作数栈中压入3,i++,先向操作数栈中压入3,局部标量表中的i再自增,变为4,之后,操作数栈中,3*3=9,加上2等于11,赋值给k, 此时,局部变量表中的i为4。
本文地址:https://blog.csdn.net/qq_45273552/article/details/109276085
上一篇: SpringMVC学习日记总结
下一篇: 黄忠年轻时如何?为何直到老年才被重用呢?