看到一道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
也看了些网上的介绍,应该是这样子吧