Java e Ponteiros

[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.

Vini, essas classes são fictícias pra representar o meu problema, as inventei só pra ilustrar o problema que o tópico propõe. Mas as classes em si apenas têm métodos gets e sets gerados autmaticamente pelo Eclipse.

Gente… vida de programador é uma absurdo!

A implementação FICTÍCIA que eu criei aqui estava CORRETA, e retornaria o resultado que eu desejo. :frowning:

O problema estava na minha implementação REAL, com a qual estou trabalhando. Quis criar uma representação dela só pra mostrar a vocês de forma mais simples para que pudessem entender o problema.

O erro na minha implementação era porque eu estava fazendo aquele new ItemHistorico() FORA da iteração. Aí não rola, mesmo. Toda vez ele ia modificar os valores do mesmo itemHistorico. :?

Fim das contas: acabei falando um punhado de abobrinha aqui, onde todo mundo se confundiu. Peço desculpas e agradeço o empenho de vocês em tentar me ajudar. :expressionless: Vai ver eu só preciso de um livro de AUTO-ajuda. :?

Obrigado a todos.

Abraços!

Hahahahaah… acontece nas melhores famílias.