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

以一例引入:
请看如下几行代码:

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。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值