Dúvida GC

Então, galera eu fiz essa questão do ExamLab e achei 1 objeto elegivel para o GC mas a resposta oficial é 2
Não consegui achar o 2o!! To pra te dizer esse ExamLab é meio estranho, talvez eu tenha errado mesmo essa mas tinha questão com 2 respostas iguais certas , escolhi uma delas e recebi um errado! PQP! Na outra eu rodei o programinha igualzinho no eclipse e o resultado q eu tinha posto ( errado segundo o programa) era o certo!!

class A{ A aob; public static void main(String args[]){ A a=new A(); A b=new A(); A c=new A(); a.aob=b; b.aob=a; c.aob=a.aob; A d=new A().aob=new A(); c=b; c.aob=null; System.gc(); } }

Hum, será que contei errado? Achei 3.

 class A{  
      A aob;  
      public static void main(String args[]){  
           A a=new A();  // 1o. objeto
           A b=new A();  // 2o. objeto
           A c=new A();  // 3o. objeto
           a.aob=b;      // a.aob aponta para o 2o. objeto
           b.aob=a;      // b.aob aponta para o 1o. objeto
           c.aob=a.aob;  // c.aob aponta para o 2o. objeto
           A d=new A().aob=new A();   
           // new A().aob cria um 4o. objeto
           // new A() cria um 5o. objeto
           // 4o.aob aponta para o 5o. objeto
           // d também aponta para o 5o. objeto
           c=b;  // c deixa de apontar para o 3o. objeto, e aponta para o 2o. objeto
           c.aob=null;  // c.aob deixa de apontar para o 2o. objeto
           // Quando chegar aqui, não há referências diretas para o 3o. objeto,
           // mas o 2o. objeto ainda é apontado por a.aob.
           // Não há referências diretas para o 4o. objeto. 
           // A resposta seria 3 (1o. objeto, referido por a, 2o. objeto, referido por a.aob, e 5o. objeto,
           // referido por d.
           System.gc();  
      }  
 }

A resposta é 2.

Mas continuo achando que só o objeto que c apontava antes está perdido, o resto pra mim continua com referencia…

Fiz uns testes aqui acho que descobri

quando:

A d = new A().aob = new A();

o objeto newA().aob é descartado, d recebe o objeto new A(); apenas e o outro fica sem referencia…

Mas ainda acho isto estranho, eu achava que o new A() seria referenciado pela d.aob

Entendi!!!
Pensar as vezes é bom tb hehe
questaozinha pnc essa…

Em:

Nao entendi essa parte: objeto nomeado ‘d’ recebe a instância do 4 objeto, que dentro em ‘aob’ tem a instância do 5 objeto?
Se sim, no final seria 2 mesmo.

jopss

é como se fosse assim
passo a passo:

A d = new A().aob; // aqui d = null ! o objeto é usado apenas como "meio campo" para d apontar para a variavel de instancia aob, que é null.
d = new A(); //agora sim, d aponta para o 5o objeto.

verdade! manquei agora! vlw!

jopss :lol: