Outras - Fundamentos

10 respostas
R

Qual a saída, e a explicação

package br.com.Fundamentos;

public class MyClassTest {

	private static void f(MyClass[]array){
		array[0]=null;
		array[1]= array[0];
		array[2]=array[1];
		array = null;
		
	}
	
	public static void main(String[] args) {
		MyClass[]array = new MyClass[4];
		for (int i = 0; i < array.length; i++) 
			array[i] = new MyClass();
			f(array);
			System.gc();
			
	}


	// How many objects are eligible for garbage collection when the System.gc()
	// method is invoked

	A - 3 	
                B - 4
	C - 5
	D - Codigo não compila
	E - Nenhuma das respostas.
	
}

[/code][code]

10 Respostas

rbonjour

A resposta correta é D, pois o compilador não sabe quem é MyClass.

T

acho que vai rolar um exception IndexOutOfBounds

R

opa pessoal o código correto segue agora

package br.com.Fundamentos;

public class MyClassTest {

	private static void f(MyClassTest[]array){
		array[0]=null;
		array[1]= array[0];
		array[2]=array[1];
		array = null;
		
	}
	
	public static void main(String[] args) {
		MyClassTest[]array = new MyClassTest[4];
		for (int i = 0; i < array.length; i++) 
			array[i] = new MyClassTest();
			f(array);
			System.gc();
			
	}
}

// How many objects are eligible for garbage collection when the System.gc()
// method is invoked

A - 3     
            B - 4   
C - 5   
D - Codigo não compila   
E - Nenhuma das respostas.
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

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

ok a resposta correta é a A 3 , conforme explanação do whizlabs
e a explicação do colega javadev, valeu pessoal

ViniGodoy

É verdade! Essa errei por falta de atenção. :frowning:

Criado 2 de março de 2008
Ultima resposta 2 de mar. de 2008
Respostas 10
Participantes 7