Ex: 01
Escolha a opção adequada ao tentar compilar e rodar o arquivo a seguir:
class B{
}
class A {
public static void main(String[] args) {
B b;
for(int i = 0;i < 10;i++)
b = new B();
System.out.println("Finalizando!");
}
}
A) Compila e garbage coleta 10 objetos do tipo B na linha do System.out. B) Compila e não podemos falar quantos objetos do tipo B foram garbage coletados na linha do System.out. C) Não compila.
Segundo o exercício, a alternativa correta é a B. Entretanto, pelo que entendi, o código apresentado cria 10 objetos que se tornam inacessíveis e elegíveis para serem coletados pelo garbage collector. De fato, não dá para afirmar quantos objetos o GC coleta na linha do System.out, mas poderíamos afirmar que o GC poderia coletar 10 objetos do tipo B, meu entendimento está correto? Segue abaixo alterações sobre o código que fiz para chegar nesta conclusão:
class B{ int num = 0; // declarei essa variável apenas para ajudar no entendimento sobre a instância criada } class A { public static void main(String[] args) { B b; for(int i = 0;i < 10;i++){ b = new B(); System.out.println(b.num); b.num++; // mesmo atribuindo um valor no atributo "num" da classe B, o mesmo é "perdido" quanto um novo objeto é atribuído na variável b } System.out.println("Finalizando!"); //System.out.println(b.num); // variável inacessível fora do escopo do for } }