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

总结:

  1. i = i++这种类型的自加操作,在实际中无意义,相当于兜兜转转又使i回到了原来的值,碰到此类问题可以直接将“++”删去再分析即可。
  2. 包括i *= i++, i /= i++, i -= i++这种情况,也可以直接无视“++”去分析。
		int a = 2;
		a *= a++;
		System.out.println(a);//4
		a *= a++;
		System.out.println(a);//16
		a /= a++;
		System.out.println(a);//1
		a -= a++;
		System.out.println(a);//0

参考链接:
https://blog.csdn.net/qq_44830106/article/details/117604786
https://blog.csdn.net/qq_34137397/article/details/110377711

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值