gente, vi lah nos simulados do livro da kathy uma pergunta, na qual era considerado resposta verdadeira o seguinte:
Algumas variaveis de referencia residen da Heap e outras na Pilha.
eu não entendi a justificação da resposta '
Lembro que eu li uma vez, acho q foi no livro dela.
Que as variaveis de referencia residen na Heap, junto com os objetos q referenciam … nun tenhu certeza
alguem pode me dar uma luz? porque que aquela afirmação é verdadeira?
Provavelmente houve uma pequena confusão aqui. Existem duas maneiras de classificar variáveis:
Quanto ao tipo: variáveis de tipos primitivos x variáveis de referência
e quanto ao escopo: variáveis locais x variáveis de instância
A localização da variável varia somente com o escopo: variáveis locais são alocadas na pilha e variáveis de instância são alocadas na heap.
A confusão se dá, pelo seguinte, o que muda quanto ao tipo da variável é a localização dos dados que ela representa. Os valores das variáveis de tipos primitivos são armazenados no local da variável, na pilha se a variável for local, ou no heap, digamos, “dentro” do objeto que a detêm. Por outro lado, objetos (além de arrays e enums) referenciados por uma variável de referência são sempre alocados na heap.
então pelo o que percebo, é a mesma regra q a gente usa para as variaveis primitivas
observe:
public class TesteHeap {
MinhaClasse MC1 = new MinhaClasse(); // a variavel de referencia MC resite dentro de TesteHeap
// portanto na Heap
void cria(){
MinhaClasse MC2 = new MinhaClasse(); // a variavel de referencia MC2 reside na pilha.
}
class MinhaClasse{}
}
É isso mesmo! Como eu disse, o que causa confusão é o conteúdo da variável. MC2 se localiza na pilha, porém, o objeto criado também será colocado na heap, sacou ? E só pra completar, esse objeto será elegível para gc assim que o construtor terminar de executar.