JAVA中while判断中变量自减_java中自增自减运算与c中自增自减的区别

今天看到java面试宝典里面有一道题目是这样的:

a1f6720c725ce48db26a0c1caf367d6f.png

答案是0,我开始也有疑问,后来看到后面说到java的中间缓存变量,后来到网上查了查,终于理解了,是什么意思了。请看下面的代码和解释:

package com.wj.demo;

public class Test1 {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int j=0;

for(int i=0;i<100;i++){

j=j++;

/*

*

java中间缓存变量的机制,在java中,执行自增运算时,会给每个自增操作分配一个临时

变量,如果是前缀加(++i),就会先自加1后赋值给临时变量;如果是后缀加(i++),就会

先赋值给临时变量后自加1.运算最终使用的,并不是变量本身,而是被赋值了得临时变量。

所以上面的j=j++;等于如下操作:

temp=j;

j=j+1;

j=temp;

*/

}

System.out.println("j="+j);

}

}程序运行的结果是0,你可以测试下。

当然这里用的是++运算,但是对于--运算Java中的中间缓存变量机制也适用。

当我看到这里的时候,我想起了c和c++里面不是也有++,和--操作吗?我就查了下资料,果然发现java中i++,--运算和c,c++里面的++,--运算,有很大的区别。

我们来看看要是用c写一样的代码会出现什么情况:

#include

int main(){

int i, sum1, sum2;

i=0;

sum1 = (i++)+(i++);

printf("sum1=%d\n",sum1);

i=0;

sum2=(++i)+(++i);

printf("sum2=%d\n",sum2);

int j=0;

for(i=0;i<100;i++){

j=j++;

}

printf("j=%d\n",j);

return 0;

}

输出结果:

122aeba6ffd06469badcbec0af5006d7.png

我们可以看到,输出的结果是100,这又是为什么了?

因为在c语言中,每个变量在它的生命周期内的每个时间点都只能有一个唯一的值。因此变量在每一次自增运算时,变量所对应内存区域的内容就被重写了。所以出现的时100的结果,也就是说在进行j=j++操作的时候,先把j=j进行操作,然后j=j+1;因为在生命周期内每个时间点都只能有唯一的一个值,所以最后j的值应该为j=j+1;用这个方式你可以分析下上面的代码sum1和sum2的值是怎么来的。这个原理对c和c++的--操作同样适用。

因此在有++,--操作的运算符的语言里面一定要慎重使用,能不用,则最后不用,容易出现问题。

原文:http://blog.csdn.net/j903829182/article/details/38396231

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值