Normalmente, no.
Pero como todas las cosas: depende. El GC en Java en estos días es MUY bueno y todo debería limpiarse muy poco después de que ya no sea accesible. Esto es justo después de dejar un método para variables locales y cuando ya no se hace referencia a una instancia de clase para campos.
Solo necesita anular explícitamente si sabe que, de lo contrario, permanecería referenciado. Por ejemplo, una matriz que se mantiene alrededor. Es posible que desee anular los elementos individuales de la matriz cuando ya no sean necesarios.
Por ejemplo, este código de 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;
return oldValue;
}
Además, anular explícitamente un objeto no hará que se recopile un objeto antes que si simplemente saliera del alcance de forma natural siempre que no queden referencias.
Ambos:
void foo() {
Object o = new Object();
}
y:
void foo() {
Object o = new Object();
o = null;
}
Son funcionalmente equivalentes.