锁定老帖子 主题:在finally赋值为什么无效?
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-12
这个题目正说明了java是按值返回的,如果把i设成Integer型,具有更好的说明性,i只是一个对象的引用,在finnally中改变i只是将i指向另一个Integer对象,但是返回值在之前已经确定了。
|
|
返回顶楼 | |
发表时间:2007-05-12
Qieqie 写道 i是值变量,你在try里面写了return i; 这时虚拟机栈已经把 i 这时的值copy到栈顶,然后才再去处理finnaly,之后你对 i 进行任何改变不会影响这时候栈顶的这个返回值,只会影响 i 的值。所以尽管此时i的值变了,但那是 i 的事情,不是Return的事情。
这个问题我觉得挺好,LZ有研究问题,问为什么的态度,我评良好! 有道理, 在上面例子中,try 中return执行后,先退出try block,再退出 method body。 因为return已经执行,return的值是已经确定的,在接下来退出try block的时候执行了finally 的代码,此时finally对i值的修改已经不能影响return了,接下来程序退出method body,返回2。 |
|
返回顶楼 | |
发表时间:2007-05-12
看下他的字节码就很清晰了.
|
|
返回顶楼 | |