[quote=ViniGodoy]Isso que você está descrevendo não pode acontecer em Java.
Veja bem, isso aconteceria se a variável item fosse um ponteiro, e o método setItem recebesse o endereço desse ponteiro.
Mas em java, isso não ocorre. Cada vez que você chama o set, o endereço do item iterado será copiado e o objeto de histórico receberá esse endereço.
Alterar o valor de item posteriormente não deverá alterar o valor que está dentro de itemHistorico.
Se isso está ocorrendo, o problema não está aí. Mas em alguma outra classe, que pode estar usando uma variável estática.[/quote]
Implicitamente, em Java, tudo é ponteiro (menos int, double, etc).
Então quando eu faço item = itens.get(i);, eu to falando, implicitamente, que eu quero que item aponte para o elemento i na lista de itens.
Na primeira iteração o código transcrito ficaria item = itens.get(0);, ele estaria apontando pro elemento 0. Na segunda iteração seria item = itens.get(1);, e estaria apontando pro elemento 1, e assim por diante.
Quando eu faço itemHistorico.setItem(item), eu estou dizendo pra ele acoplar o ponteiro “item”, ou seja: para onde item estiver apontando, o itemHistorico.getItem() irá me retornar o mesmo resultado que “item” retornaria.
Eu não sei se o fato de eu estar abordando ponteiros explicitamente nas minhas palavras está confundindo vocês, mas em java quase tudo é ponteiro, de maneira implícita. Você só não tem acesso de manipulação a eles diretamente.