C语言和java的自增运算区别

看到一道C语言的题目

int main(){
	int y,x=3,z=1;
	y=(++x)+ (++x);
	printf("%d",y);
}

输出y是10
在C语言中变量的内存空间在编译时分配的,而且在变量的生命周期内,一个变量名只对应一块内存区域,它的运算顺序是先算前面的(++x)此时(++x)变为4,再计算后面的(++x),此时(++x)变为5,再计算前后两项的和,5+5=10

在C语言的程序运行过程中,变量在每一次自增运算或赋值运算之后,其所对应内存区域中的内容就被重写,在变量的生命周期内的每一瞬间只能有唯一一个确定的值。

然而在java的环境里编译
在这里插入图片描述
答案是9
这是为什么呢?
在Java语言中,编译时并没有为变量分配内存,仅仅是创建了一种类型变量的对象模板,在类文件被解释执行时,每次都要为所执行到的变量创建一个临时对象(分配内存)。
创建两个临时的整型变量对象,分配相应的内存空间,用来存储每次对自增运算表达式的计算结果。
计算顺序是x=3,前面的(++x)是4,后面的(++x)在前面的基础上+1,也就是4+1成了5,最后再计算两个(++x)的和为4+5 答案是9

也看了些网上的介绍,应该是这样子吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值