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++结果分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程