一个java数组赋值的问题,困扰已久,很有意思的问题
很久以前遇到的一个问题
?
int c=3;
int[] array=new int{5];
array[c]=c=8;
问最后的结果是什么?
开始我以为java赋值是右结合的,因此认为是溢出异常
可是结果是array[3]=8,c=8
迷茫了,查了一下java规范,写的java赋值是左结合,而且=左边的变量一定会先被转换成为真实值
这样的话能理解第一步,也是是array[c]被转化为array[3],但是为什么在c=8之前,c不被赋值为3并且赋给array[3]呢?
迷茫中,请各位指点
?
?
?
自己解答一下:
做了个实验
int a=3;
int b=5;
a=b=8;
结果是a,b都为8,而不是a=5,b=8
试着为赋值语句加括号
(a=b)=8编译时通不过,而a=(b=8)可以,并且结果与上面一样
想来应该是因为这个原因吧,
?
另外今天看到的,如果在try中有return,finally还会不会执行
答案是会,在return前执行