Instanciando um objeto sem atribui-lo a uma variável

Olá…
Outro dia estava fazendo um exercicios de arrays e me deparei com o seguinte códio

new Desafio().imprime(5);

Desafio é uma classe e imprime é um método desta classe. O que faz não é tão importante pois a minha dúvida esta no fato de ter feito o exercicio assim:

Desafio de = new Desafio();

de.imprime(5);

como nunca tinha vista a forma anterior eu fiquei com dúvidas em relação a ser normal fazer isto, porque fazer isto …não seria melhor criar uma variável e passar para ela a referencia do objeto da classe desafio…eu posso dizer que desta forma eu tenho um objeto da classe desafio e desta forma como eu acesso se não tenho a referencia a ele.

Obrigada!

Entao quando vc faz new Desafio() vc esta criando um objeto Desafio mas nao esta atribuindo á nenhuma variavel de referencia, ou seja vc vai usar esse objeto neste momento e ele nao tera referencia nenhuma para ser reutilizado posteriormente…

Mas qual seria a utilidade disto, eu teria que ter a absoluta certeza que não precisaria do objeto para mais nada, uma vez que não tenho referencias a ele, como o Gabbage Colec…trata ele?

O GC tratará esse objeto como não sendo referenciado por nenhuma variável de referência.

Use isso apenas quando achar realmente conveniente. Quando vc executa:

new Desafio();

O construtor é executado. Então, quando você precisar disso faça assim…

Se você usar

new Desafio().imprime(5);

O construtor será executado, óbvio, pois o objeto está sendo instanciado, e só então o método imprime() será chamado.

Depois disso esta instância da classe Desafio ficará “perdida” no Heap, isto é elegível ao GC.

Abraços!

Exatamente ao instanciar o objeto sem atribui-lo á uma variavel de referencia vc utilizara ele no exato momento, e após o uso o GC verificando a falta de referencia á esse objeto o mesmo sera um candidato para ser limpado da heap.

Obrigada pelas respostas…agora esta bem esclarecido