论坛首页 入门技术论坛

在finally赋值为什么无效?

浏览 7292 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-12  
这个题目正说明了java是按值返回的,如果把i设成Integer型,具有更好的说明性,i只是一个对象的引用,在finnally中改变i只是将i指向另一个Integer对象,但是返回值在之前已经确定了。
0 请登录后投票
   发表时间: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。
0 请登录后投票
   发表时间:2007-05-12  
看下他的字节码就很清晰了.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics