packagebr.com.Fundamentos;publicclassMyClassTest{privatestaticvoidf(MyClass[]array){array[0]=null;array[1]=array[0];array[2]=array[1];array=null;}publicstaticvoidmain(String[]args){MyClass[]array=newMyClass[4];for(inti=0;i<array.length;i++)array[i]=newMyClass();f(array);System.gc();}// How many objects are eligible for garbage collection when the System.gc()// method is invokedA-3B-4C-5D-CodigonãocompilaE-Nenhumadasrespostas.}
// How many objects are eligible for garbage collection when the System.gc()
// method is invoked
A-3B-4C-5D-CodigonãocompilaE-Nenhumadasrespostas.
ViniGodoy
Acho que é a resposta B.
Apenas os objetos dentro do array são apagados na função f.
Como o que é passado para a função f é uma cópia da referência ao array, torna-la nula não torna a variável fora da função nula também.
tRuNkSnEt
Acho que a pegadinha pode estar no laço For (como ele não tem tem os { } somente a primeira linha baixo está dentro do laço) porque ela leva a crer que a função F vai ser chamada 4 vezes dai quadruplicasse o número de elementos a ser limpados pelo GC.
Minha dúvida é, como o GC trata elementos nulos dentro de array não nulo?
De qualquer forma eu acho que é letra E uma vez que o GC do java é preemptivo.
ViniGodoy
O fato dele ser preemptivo tem pouca relevância aqui.
A pergunta é “quantos objetos estão aptos a serem coletados”, e não “serão coletados”.
Também acho que a identação errada ali é sacanagem.
Javabuntu
acho que é a B, poque o laço for vai preencher o array, porém o f(array); será chamado uma única vez depois do for, e lá o array sai com as referências tudo null…ou seja as 4…eu acho q é isso…
J
javadev
Alternativa A. Reparem que ainda há um objeto MyClassTest referenciado por array[3], pois dentro do método f array[3] não é modificado.
R
rogsousap
ok a resposta correta é a A 3 , conforme explanação do whizlabs
e a explicação do colega javadev, valeu pessoal