Java自增问题:x=x++

看到一篇有趣的面试题:

 

public class demo {
	
	public static void main(String[] args) {
		int j = 0;
		for (int i = 0; i < 100; i++) {
			j = j++;
		}
		System.out.println("j= " + j);
	}
}


初始化变量 j = 0;

 

然后循环100次,在循环内进行 j = j++操作,请问最后输出 j 的值是多少?

 

看了一眼,第一反应没经过脑子就想到了100,然后去调试运行了一下,妥妥的错了。 答案是:

 

答案是0.。。。。。。

 

直接开始解释吧:

 

1、在Java中,在其做++或者--操作时候,会给该变量分配一个内存空间,用来存储 原始的该变量对象的值,在这里保存的是 j = 0; 另外一个内存空间进行++或者--运算。因此现在是两个内存空间,一个用来存储原始变量的 j=0 空间1,另外一个是用来进行++或者--计算的 空间2;

2、当变量做完++或者--操作后,空间2(即++或者--操作)内存将被释放

3、因此 j = j++后,j++后该计算内存空间被释放了,因此还是取原始的值 j = 0的值;

4、所以 j = j++最后的值 就是 0,无论循环多少次都一样。

 

可以做一个改变:

 

public class demo {
	
	public static void main(String[] args) {
		int j = 0;
		int x = 0;
		for (int i = 0; i < 100; i++) {
			x = j++;
			j = x;
		}
		System.out.println("j= " + j);
	}
}


用上面代码进行debug断点调试,会发现:

 

1、循环中,执行完 x = j++后, j的值变为了1 , 而 x 值反而 还是0,

2、因此 j = x;结果还是0

3、所以呢,我们从x = j++;这个操作中可以看出,j++后,并没有给 x 运算后的值1,反而是原始的值 0 ,所以验证了我上面的说法(将int j = 100,x将为100)

 

建议:

1、做++或者--操作时候,还是希望能够进行一个单独的一个操作,不要用变量来做赋值运算

 

更多精彩敬请关注公众号

Java极客思维

微信扫一扫,关注公众号

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值