Olá pessoal, estou em dúvida em um determinado conceito na seguinte questão:
Dado:
class CardBoard{
Short story = 5;
CardBoard go(CardBoard cb){
cb = null;
return cb;
}
public static void main(String[] args){
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
c1 = null;
// faz algo
}
}
Quando a execução chegar a // faz algo, quantos objetos estarão qualificados para a coleta de lixo?
A. 0
B. 1
C. 2
D. A compilação falha
E. Não é possível saber
F. É lançada uma exceção no tempo de execução
A resposta do livro é C, mas para mim era B pelo seguinte motivo. c1 e c2 criaram dois objetos CardBoard e também dois objetos Short. De acordo com o livro, para objetos Byte, Boolean, Short e Integer (esses para valores abaixo de 127), é true quando comparados com == se esses objetos armazenarem o mesmo valor(claro que esses dois objetos têm que ser do mesmo tipo). Bom, a explicação da resposta ser C é porque c1 deixa de referenciar seu CardBoard e tanto esse quanto o objeto o qual a variável de instância story referencia podem ser coletados pela JVM. Mas a variável c2 também cria um objeto cujo valor é 5. Portanto, de acordo com o que diz o livro, a variável de instância c2 não deveria referenciar o mesmo objeto que a variável de instância story de c1, e portanto esse objeto Short não seria coletado pela JVM?
edit: Comi algumas palavras e havia esquecido de revisar…
