考虑以下这段代码:
public void foo(){
try{
//some cool statements here
}
finally {
if(session != null){
session.close();
sesssion = null;
}
}
}
由于会话关闭,分配给会话的值有意义吗?请提供一些有价值的见解。
答案 0 :(得分:0)
不必将局部变量设置为null
,这是CERT Oracle安全编码标准的Recommendations
不需要将局部引用变量设置为null来“帮助垃圾收集器”。这会给代码增加混乱,并使维护变得困难。 Java即时编译器(JIT)可以执行等效的活动度分析,并且大多数实现都可以执行。
答案 1 :(得分:0)
在对象本身变得无用的情况下(在本例中为封闭会话),将变量设置为null可能很有用。这样的对象通常证明在调用close
或类似方法之后,对该对象的所有进一步操作将失败,例如抛出IllegalStateException
。在这些情况下,删除此类实例无疑是有意义的,尤其是在代码的其他部分期望并检查空实例作为“无连接”的迹象的情况下。
如其他答案所述,垃圾收集并不是将变量设置为null的有效理由。