关于Java中的 i = i ++ 的问题

探讨了Java中同一表达式内对同一变量多次赋值的情况,尤其关注'i=i++'这一经典面试题,解析了其背后的JVM运算机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int i = 0;

i = i ++;

这种表达式考察的是回答者对于JVM中运算器的运算机制的掌握。

这种在同一个表达式中对同一个变量多次赋值的写法是不会在开发中写到的(因为多次赋值必然会发生值的覆盖,毫无意义)。

一般见于IT公司进行Java程序员招聘的面试题里。


以我们之前所学的知识,

i = i ++

可以分成以下两句:

i = i;          //此时i依然为0

i ++;          // i = i + 1, 此时i变为1

所以很多人认为答案会是1


先统一一下答案好吧。最终i的值为0,也就是说i的值并没有发生任何改变。

废话不多说,说下为什么。


第一句把0赋值给i应该没有什么问题。
问题就在于第二句的 i = i ++;

众所周知,“=”的优先级是大于后置“++”的。所以程序先将变量 i 的值 0 取出放入栈中,准备赋值。此时执行到 i ++ ,变量 i 的值自增为 1 ,此时的确是 i = 1 。接下来继续执行赋值语句,由于之前JVM已经将 i 的值 0 入栈,此时JVM并不知道 i 的值已经发生了改变,便直接将栈中预存的 i 的值也就是 0 取出进行赋值。遂将刚赋完值的 i = 1 覆盖为 i = 0。故最终结果为0。


笔者实力有限,若想深究,出门左转-->JVM工作原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值