No livro da Kathy tem a seguinte questao:
public class Eco {
public static void main(String[] args) {
Eco e1 = new Eco();
Eco e2 = new Eco();
Eco e3 = new Eco();
e3.e = e2;
e1.e = e3;
e2 = null;
e3 = null;
e2.e = e1;
e1 = null;
}
Eco e;
}
Em que ponto há apenas um objeto qualificado para a coleta de lixo?
a. Após a execução da linha 8.
b. Após a execução da linha 9.
c. Após a execução da linha 10.
d. Após a execução da linha 11.
e. A compilação falha.
f. Nunca nesse programa.
g. É lançada uma exceção no tempo de execução.
Resposta: G está correta. Um erro na linha 10 faz com que seja lançada uma NullPointerException, porque e2 foi definida como null na linha 8. Se a linha 10 fosse colocada entre as linhas 7 e 8, então F estaria correta, porque até que a última referência seja anulada, nenhum dos objetos estará qualificado, e depois de anulada a última referência, todos os três estarão qualificados.
A resposta ser letra G até que eu entendi, apesar de não concordar pq a pergunta foi “Em que ponto há apenas um objeto qualificado para a coleta de lixo?” e não “Qual é o resultado?”. Mas a minha dúvida é que eu não vi em nenhuma parte do livro sobre a última referência ter que ser anulada pra q todos os objetos estejam qualificados. Não entendi direito essa parte. Alguem poderia me explicar mehor? Porque pra mim, se a linha 10 fosse colocada entre as linhas 7 e 8, então a opção “a. Após a execução da linha 8.” estaria correta, que é onde o primeiro objeto é setado com null.