Erro em livro
É tão estranho encontrar um erro em um livro…
Hoje estava estudando no livro Sun Certified Programmer for Java 5 Study Guide e encontrei um erro em uma das questões do livro. Conferi em um fórum no qual o autor reconheceu o problema e alterou o enunciado.
Vejam se vocês conseguem achar o problema. ![]()
Aviso: Não é elementar.
public 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;
// do Stuff
}
// When // do Stuff is reached, how many objects are eligible for GC?
// A. 0
// B. 1
// C. 2
// D. Compilation fails.
// E. It is not possible to know.
// F. An exception is thrown at run time.
//
// Answerer: C is correct. Only one CardBoard object (c1) is eligible,
// but it has an associated Short wrapper object that is also eligible.
}
A questão é: por que a resposta do livro está errada?
.
.
.
.
.
.
.
.
.
.
.
.
Por causa de um detalhe insignificante: Objetos wrapper das classes Boolean, Byte, Short e alguns das classes Integer e Character (os que estiverem entre -128 e 127) são compartilhados.
Isso significa que só há um objeto Short no exemplo e assim, c2 mantém uma referência para ele. O único objeto que pode ser coletado é o que era referenciado por c1. A resposta é a letra B.
4 comentários 17 de Maio de 2006 às 14:23 Thiago