`

看一个连续重复修改变量的例子(Java和C比较)

 
阅读更多

先分析一下这个表达式:

                                       x+=expr           //expr代表一个表达式

                  1.   对于Java:       x的值是在计算expr之前被提取的。

                   2.  对于C:         x的值是在计算完expr之后才被提取的。

看个例子:

                int x=2;
		int y=3;
		x+=y+=x+=y;

          请问:以上代码执行完之后,x和y的值各变成了多少?

在Java中:         x变成了10;y变成了8。

在C中:              x变成了13;y变成了8。

 我们来做一下分析:

                                                    在Java中:由于被之前提取

                  1.  首先最右边的式子:x+=y

                        将x提取到中间变量temp中:  temp1=x(此时temp==2).执行完x+=y之后,x变成5.

                  2. 接下来到了中间的式子:y+=x

                        首先提取y,temp2=y。执行完y+=x之后y=temp1+x=3+5,y变成了8.

                  3。最后到了最左边的这个式子:x+=y

                         在这里实际上执行的是x=temp1+y=2+8(实际上Java用了中间变量机制)

                         在这里C语言执行的是x=x+y=5+8(C语言没有中间变量机制)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics