通常,没有。
但就像所有事情一样:这取决于。如今,Java中的GC非常好,所有内容都应该在不再可用后立即清理。这就是在为局部变量留下一个方法之后,以及当不再为字段引用类实例时。
如果您知道它将继续引用,则只需要显式为null。例如,保持在周围的阵列。您可能希望在不再需要数组的各个元素时将其置零。
例如,这个代码来自ArrayList:public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;}
此外,只要没有引用仍然存在,显式地使对象无效就不会导致对象被收集得比它刚刚自然超出范围。
都:void foo() {
Object o = new Object();
/// do stuff with o}
和:void foo() {
Object o = new Object();
/// do stuff with o
o = null;}
在功能上是等同的。