List<Repetition> l = new ArrayList<Repetition>();
Repetition a = new Repetition();
a.teste = "teste";
l.add(a);
a = null;
for(Repetition f : l){
System.out.println(f.teste); // imprime teste porque? não deveria dar Nullpointer exception?
}
}[/code]
[code]public static void main(String[] args) {
List<Repetition> l = new ArrayList<Repetition>();
Repetition a = new Repetition();
a.teste = "teste";
l.add(a);
a.teste = "x";
for(Repetition f : l){
System.out.println(f.teste); // agora imprime x, pq?
}
}[/code]
Pq quando a referencia foi null ele imprimiu o que foi adicionado anteriormente?
E quando eu alterei o nome imprimiu o nome alterado?
1° Ele imprime “teste” por que voce colocou o objeto dentro da lista, e lá dentro ele guarda a referencia, e voce colocando =null voce só mudou a referencia desse lugar, mas mesmo depois do add se voce tivesse usado a mesma referencia para mudar o resultado seria diferente.
2° É impossivel voce estar fazendo isso.
Repetition a = new Repetition();
a = "x";
Esses objetos não são do mesmo tipo, não ia nem compilar.
[quote=Marky.Vasconcelos]1° Ele imprime “teste” por que voce colocou o objeto dentro da lista, e lá dentro ele guarda a referencia, e voce colocando =null voce só mudou a referencia desse lugar, mas mesmo depois do add se voce tivesse usado a mesma referencia para mudar o resultado seria diferente.
[/quote]
Você está confundindo cara…
Uma referência é um ponteiro. A lista não guarda o objeto, guarda a referência, um ponteiro… a localização do objeto na memória.
A sua variável “a” guarda a mesma referência… Ao adicionar o objeto na lista, a lista agora tem um apontador pro objeto, que tem o mesmo valor da variável “a”.
Quando você removeu a referência de “a”, você não removeu a referência da lista, portanto, ela ainda aponta pro objeto na memória.
[quote=eltonads]Você está confundindo cara…
Uma referência é um ponteiro. A lista não guarda o objeto, guarda a referência, um ponteiro… a localização do objeto na memória.
A sua variável “a” guarda a mesma referência… Ao adicionar o objeto na lista, a lista agora tem um apontador pro objeto, que tem o mesmo valor da variável “a”.
Quando você removeu a referência de “a”, você não removeu a referência da lista, portanto, ela ainda aponta pro objeto na memória.
Algo assim… =)[/quote]
Opa agora entendi então seria mesma coisa de fazer:
[code]Repetition a = new Repetition();
Repetition b = a;[/code]
Onde se a = null, b ainda continuará referenciando o objeto criado.
[quote=eltonads]Você está confundindo cara…
Uma referência é um ponteiro. A lista não guarda o objeto, guarda a referência, um ponteiro… a localização do objeto na memória.
A sua variável “a” guarda a mesma referência… Ao adicionar o objeto na lista, a lista agora tem um apontador pro objeto, que tem o mesmo valor da variável “a”.
Quando você removeu a referência de “a”, você não removeu a referência da lista, portanto, ela ainda aponta pro objeto na memória.
Algo assim… =)[/quote]
O mesmo que eu pensei.
No primeiro caso você faz a apontar para null, porém a List ainda aponta para o objeto que a apontava (logo o GC não irá limpar este objeto). No segundo caso você alterou o valor deste objeto (objeto qual a e list fazem referencia) logo o valor para onde a list se referenciava foi alterado.