日期:2014-05-20  浏览次数:20515 次

scjp中的一个题目
int   i=0;
int   c   =3;
int   a[]   =   new   int[5];
a[i]=i=c;
求a[5],i,的值;
为什么a[0]会等于3呀!而不是a[3]呀!

------解决方案--------------------
虽然说赋值语句的执行过程是从右向左,但是a[i]中对于i的评价优先于赋值语句,所以i=0首先被a[i]看到代入,然后再执行i=c,c的值被代入到i中...一般来说死记住这个题型就好了...
------解决方案--------------------
执行到这句时,从左到右遇到a[i],将i=0,赋给就是a[0],继续往后扫描,遇到赋值号 "= ",对于赋值的执行顺序是自右向左,先执行最右的赋值将3赋给i,这个语句完了就是a[0]=3;
------解决方案--------------------
如果你懂得什么叫Eval and Apply就好了。

不过可以这样理解,从左往右Eval每个变量,从右往左Apply每个付值。所以呢:

Eval:
a[i] ==> a[0];//0
i ==> i; //0
c ==> c; //3

Apply:
i = 3;
a[0] = 3;