Java中对于i=i++的误区

代码一:
public class test {

	public static void main(String[] args) {
		int i = 0;
		int k = 0;
		for(;k<10;k++) {
			i = i++;
			System.out.println(i);
		}	
	}
}

如上述代码,运行结果为10个0,而不是1-10。这里就存在理解上的一个误区:先进行i++运算后,再把结果赋值给i。其实不然,解释如下:

对于i = i ++ 其实是存在一个中间变量比如 _x ,然后在将 _x 的值赋值给 i ,得到最后的结果:

_x = i ++ ; i 的值赋值给 _x ,然后 i 自增为 1 ,_x 为 0

i = _x ; i 的值被覆盖为 0,自增的i = 1被舍弃

所以最终的结果是 0

= 的作用是将 = 右边的计算结果赋值给左边

总结如下:

_x 负责中间变量保存i的值,最后一步都是_x赋值给等号左边的变量

++在前的时候,先自增,在保存值到_x,最后_x 的值赋值给等号右边的变量

++在后的时候,_x先保存值,在自增,然后把_x的值赋值给等号右边的变量

所以代码一输出i的结果为10个0,若把i=i++改成i=++i,其输出结果就变成了1-10。

现在你明白了么?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值