王震阳 发表于 2012-11-25 22:51
是的,这段代码也可以让两者打印一致,但是我的饿疑问是,本质的问题是finally能否改变变量i的值(这个是 ...
那我就回答你现在的问题。
其一,finally是可以改变变量的值的(因为finally块的代码是在return之前执行的,更准确的应该是在中间执行)。
其二,该例子中,finally无法直接影响return的结果,为什么呢?执行的逻辑是这样的:当函数执行到return语句的时候,发现还有finally块要执行,这个时候他会把return的结果单独放在一个空间暂存(一个确定了的值),当finally执行完成后,虽然i++了,但是暂存的那个值不是i本身,所以return的结果是2,但是finally里打印的结果是3就是如此。
其三,如果返回的是对象的引用,可以通过改变引用的指向来改变return的结果的。 |