欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

笔试高频:关于 自增变量 的那些事儿

程序员文章站 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