Как правило, нет.
Но, как и все: это зависит. GC на Java в наши дни ОЧЕНЬ хорош, и все должно быть вычищено вскоре после того, как оно перестало быть доступным. Это происходит только после выхода из метода для локальных переменных и когда на экземпляр класса больше не ссылаются поля.
Вам нужно явно обнулить, только если вы знаете, что на него будут ссылаться иначе. Например, массив, который хранится вокруг. Возможно, вы захотите обнулить отдельные элементы массива, когда они больше не нужны.
Например, этот код из 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;
}
Функционально эквивалентны.