LUPA论坛» 技术文档区(只读/存档) » JAVA » 关于finally中赋值
初来乍到
i是值变量,在try里面写了return i; 这时虚拟机栈已经把 i 这时的值copy到栈顶,然后才再去处理finnaly,之后对 i进行任何改变不会影响这时候栈顶的这个返回值,只会影响 i 的值。所以尽管此时i的值变了,但那是 i 的事情,不是Return的事情 如果在finnaly里面也加了return的话,这时候虚拟机栈又会把 i的值copy到return的栈顶(这时候是4) 所以在finnaly里面也加了return的话会返回4 这个题目正说明了java是按值返回的,如果把i设成Integer型,具有更好的说明性,i只是一个对象的引用,在finnally中改变i只是将i指向另一个Integer对象,但是返回值在之前已经确定了 try 中return执行后,先退出try block,再退出 method body。 因为return已经执行,return的值是已经确定的,在接下来退出try block的时候执行了finally 的代码,此时finally对i值的修改已经不能影响return了,接下来程序退出method body,返回2
查看详细资料
TOP
关注开源
查看个人网站