【发布时间】:2018-09-23 09:57:32
【问题描述】:
为什么当对象为null时,下面的代码在finalize方法中没有给出空指针异常??
class Person{
public int a;
public void finalize(){
//System.out.println("finalize called"+this.hashCode());
System.out.println("finalize called"+this.a);
}
public static void main(String[] args){
Person f1=new Person();
f1.a=10;
Person f2=new Person();
f1=null;
f2=null;
System.gc();
}}
O/P : 完成调用0 完成调用10
【问题讨论】:
-
哪一部分应该给NPE?如果您希望
this成为null,那在任何时候都是不可能的。 -
f1=null; f2=空;您能否解释一下,即如果 f1 和 f2 为 null 那么为什么在 finalize 中没有 NPE 到来?
-
是吗?您设置了 2 个对
null的引用。如您所见,您的finalize()方法不会尝试访问其中任何一个(或者您在其中看到f1或f2吗?)。 -
那为什么输出是:finalize called0 finalize called10 ?
-
因为你设置了
f1.a = 10所以f1的finalize输出finalize called10。 f2.a == 0(int 的默认值)并且它的最终确定是输出finalize called0
标签: java garbage-collection finalize