Dúvidas com coletor de lixo

Tenho o código abaixo e gostaria de confirmar quantos objetos estarão aptos para o coletor de lixo.

class Test{
Float x=5.2f;
Test(){}
Test(float f){
x=f;
}

Test getObject(Test t){
t=null;
return t;
}

public static void main(Stringargs[]){
Test t=new T();
Test t1=t;
Test t2=t.getObject();
t=null;
}
}

Acredito que tenho dois objetos para serem coletados. O objeto t e o Float x. (Correto).

Goastaria de confirmar o seguinte, se eu não atribuisse um valor para Float x, ele receberia null, Então eu teria apenas um onjeto para ser coletado? Certo?

E se o Float x fosse float x? Eu também teria apenas um objeto a ser coletado, pois float x não é objeto então não fica no heap.
Certo?

Tem dois erros ai kra.

Com certeza esse foi erro de datilografia, vc ta chamando um construtor de uma classe q n existe, seria no caso então:

Test t = new Test();

Mas td bem, deu pra intender =PP

O danado é q nessa linha:

Vc ta chamando o método getObject() e n tá passando parâmetro nenhum. Ele precisa de um parâmetro do tipo Test. Acredito q seja mais um erro de datilografia, e como só houve um único objeto instanciado nesse código, creio eu q vc queria passar ele.

Se for isso acredito q não há objetos a serem coletados.

As variáveis t e t2 estão null, porém a variável t1 ainda aponta para o objeto criado, logo ele n está propenso a coleta. Acredito q seja isso.

Retificação do código.

class Test{
Float x=5.2f;
Test(){}
Test(float f){
x=f;
}

Test getObject(Test t){
t=null;
return t;
}

public static void main(Stringargs[]){
Test t=new Teste();
Test t1=t;
Test t2=t.getObject(t);
t=null;
}
}

Posso estar errado (se tiver, alguém me corrija), mas acho que não há nenhum objeto apto para coleta.

Você tem 2 objetos instanciados:

Test t = new Teste(); Float x = 5.2f;

Depois t1 referencia o mesmo objeto que t:

Test t1=t;

Depois t2 não referencia nada (null):

Test t2=t.getObject(t);

E depois vc anula a referencia de t:

t = null;

Mas t1 ainda continua referenciando o objeto criado…

[quote=Marcos Paiva]Acredito que tenho dois objetos para serem coletados. O objeto t e o Float x. (Correto).

Goastaria de confirmar o seguinte, se eu não atribuisse um valor para Float x, ele receberia null, Então eu teria apenas um onjeto para ser coletado? Certo?

E se o Float x fosse float x? Eu também teria apenas um objeto a ser coletado, pois float x não é objeto então não fica no heap.
Certo?[/quote]

acho que, como o diego2005 citou, t1 ainda vai estar apontando para o objeto que você criou e, portanto, nenhum objeto estará elegível ao GC. Mas o que vc falou é verdade: quando um objeto for elegível ao GC se seus atributos forem do tipo referencia e tiverem algum objeto, esses objetos tb estarão elegíveis. Isso aconteceria no seu exemplo se vc comentasse a linha que faz Test t1 = t;