i=i++结果分析
2021/6/27 23:22:22
本文主要是介绍i=i++结果分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
面试题中有时候会出现i=i++类似的情况,如下面代码所示:
public class Test11 { public static void main(String[] args){ int count = 0; for(int i = 0; i < 10; i++){ count = count++; } System.out.println(count);//count=0 } }
在这一片段中,count使用for循环自加10次,但是最后输出的结果仍未0。
程序第一次循环时的详细处理步骤如下:
JVM把count值(其值是0)拷贝到临时变量区。
count值加1,这时候count的值是1。
返回临时变量区的值,注意这个值是0,没修改过。
返回值赋值给count,此时count值被重置成0。
int temp = count; //先把i变量的值10保存到临时变量中 count = count+1; // i变量的值加1操作 count = temp; //再把临时变量中的值赋值给i
public class Test11 { public static void main(String[] args){ int i = 1; i = i++; i = i++; i = i++; i = i++; //i = ++i; System.out.println("i=" + i);//i=1 int j = i++; System.out.println("i=" + i);//i=2 int k = i + ++i * i++; System.out.println("i=" + i);//i=4 System.out.println("j=" + j);//j=1 System.out.println("k=" + k);//k=11 } }
在这一代码片段中i也反复自加,但也是没有丝毫效果。在第一个输出语句中仍输出i=1。
i=i++这种操作似乎并没有改变任何东西,即使将其删除也不会影响输出结果。
但对于j = i++;这种情况,i在程序后面使用时其值自加了1。
这是为什么呢?
int i=1; 这句执行结束后局部变量表中i的值就为1
i=i++; 执行这一句过程如下
①把i的值压入操作数栈,那么操作数栈中值为1
②执行i++操作,那么局部变量表中i的值为2
③最后执行赋值操作,把操作数栈中的值赋值给i,于是局部变量表中i的值被覆盖,变成1,因此i=1
int j=i++
①先把i的值压入操作数栈,那么操作数栈中值为1
②执行i++操作,局部变量表中i的值就变为2
③最后执行赋值操作,此时操作数栈中的值为1,因此j赋值为1,此时j=1,i=2
总结:i=i++这种类型的自加操作,在实际中无意义,相当于兜兜转转又使i回到了原来的值,碰到此类问题甚至可以直接将其删去再分析。
参考链接:
https://blog.csdn.net/qq_44830106/article/details/117604786
https://blog.csdn.net/qq_34137397/article/details/110377711
这篇关于i=i++结果分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略