你真的了解自增和自减吗?

自增和自减

昨天面试遇到了如下题目,当时我就裂开了,平时也就用用 int j = i++ 或者 int j = ++i; 这不难理解,就是先赋值还是先参加计算。下面的你会吗?答案默默记在心中。

int a = 0;
a = a++ + a++ + a++ + ++a;
System.out.println("a = "+a);

如果你的答案是7,恭喜你比我厉害,我当时的确选错了(小星星知错改错也认错),如果不是这个答案,你就要认真往下看了:

a++ + a++ + a++ + ++a 表示 (((0+1)+2)+4),从这个表达式应该就能看出来执行的过程了,a++ + a++ 第一步a先参加计算后做+1操作,那就是0+?,之后a就变成了1,第二步a也是先参加计算0+1,然后做+1操作,这时候a变成2。第三步同理,0+1+2,这是a已经是3了(由于后++),第四步 ++a 表示先做+1操作,后参加计算,也就有了最后的+4运算。

以下内容更加精彩?(并非原创,只是觉得很有意思,最后我会给出链接地址):
我再出一道题:

int j = 0;
for (int i = 0; i < 100; i++) {
	j = j++;
}
System.out.println(j);

也许你的答案和我一样是100(每次都是先赋值,然后做自增)
其实结果是:0。

原来Java编译器使用了中间缓存变量的机制

java的编译器在遇到i++和i–的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。

首先看一下如果是 j = i++ 的情况:
在这里插入图片描述
上面的操作就相当于:

int temp = i;
i = i + 1;
j = temp;

我们再看看 j = j++ 的情况
在这里插入图片描述
上面的操作就相当于:

int temp = j;
j = j + 1;
j = temp; //这里把原来的值覆盖了,所以j初始值是多少,最后结果也是多少

小星星在此感谢您的博文-> https://lovoedu.gitee.io/javablog/2017/06/13/20170613/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值