gpt4 book ai didi

java - 最终如何阻止工作

转载 作者:行者123 更新时间:2023-12-01 06:16:22 25 4
gpt4 key购买 nike

如果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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com