Atribuindo null

Atribuindo <code>null</code>
peas
peas

Compartilhe

Um post bem curto sobre uma prática que aparece comumente em códigos por aí: ```java public void metodoQueListaUsuarios() { List lista = dao.pegaListaDeUsuarios(); for(Usuario u : lista) { System.out.println(u.getNome()); } lista = null; // pra que isso? }


Essa atribuição da `lista` para `null`, como muitos de vocês sabem, é totalmente desnecessária, pois ao fim do método o escopo da variável `lista` termina e ela morre automaticamente, já que essa é uma variável de pilha. Achar que isto está ajudando o Garbage Collector é um engano.

Porém tem alguns casos que isto é aplicável. O primeiro é se `lista` fosse um atributo, e não uma variável local ao método. Mas se você está atribuindo `null` a um atributo no fim de todo método, ele tem grande potencial de ser refatorado para varíaveis locais.

O segundo caso é quando você tem um objeto `X` alocado no heap e não vai usá-lo mais, porém você ainda tem trabalho a fazer no escopo da variável que referencia `X`. O Garbage Collector não poderá coletar `X`, nem mesmo marca-lo para coleta, enquanto a sua referência existir, e pode ser que ela continue existindo por muito tempo, como no código abaixo:

```java
 public void metodoQueListaUsuarios() { List<Usuario> lista = dao.pegaListaDeUsuarios(); for(Usuario u : lista) { System.out.println(u.getNome()); } lista = null; dao.fazOperacaoDemorada(); // lista ainda em uso? } 

Neste caso faz sentido tentar liberar a variável o mais rápido possível. Caso contrário, durante a nossa dao.fazOperacaoDemorada(), o objeto estará presente na memória e não poderá ser coletado (as vezes, em vez de atribuir null, podemos obter o mesmo efeito criando um novo escopo com {}). Claro que essa atribuição merece ser documentada. Essa operacaoDemorada poderia ser mais grave ainda caso a thread vá ser colocada em wait.

Banner promocional da Alura, com chamada para um evento ao vivo no dia 12 de fevereiro às 18h30, com os dizeres

Dizem também, mas aí já está além do meu conhecimento, que a virtual machine hoje em dia consegue detectar essas variáveis que não tem mais uso em um determinado escopo, eliminando-a antes mesmo que o seu escopo feche.

Veja outros artigos sobre Programação