如果finally
block 在return statement present in side try block
之前执行,那为什么return list
未打印null
而是打印 [DEV]。
public class Sub {
List list = new ArrayList();
public List check(){
try {
list.add("DEV");
return list;
}finally{
list = null;
System.out.println("Inside finally ["+list+"]");
}
}
public static void main(String[] args) {
Sub sup = new Sub();
System.out.println(sup.check());
System.out.println(sup.list);
}
}
<小时/>
O/P:
- 最后在里面[null]
- [开发]
- 空
最佳答案
list
引用的值对象在 finally
之前在堆栈上更新语句被执行。
事情是这样的
- 列表项
return list;
在try
block 更新list
引用的对象在堆栈上。 - 另一方面,即使
finally
block 在try
之后执行 block ,分配list = null;
已完成,但堆栈上的值未更新。它不会改变返回值。 - 声明
System.out.println(sup.check());
打印DEV
因为它是从try
返回的值 block ,即在堆栈上更新的 block 。 - 这里
System.out.println(sup.list);
您直接指list
变量设置为null
使用list = null;
在finally
不更新堆栈上的值的 block 。
关于java - 最终如何阻止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607893/