A alteração da propriedade do objeto não é salva após o streaming em java
Atualização: OK. Então, esmaeci partes do código e descobri o que estava causando o problema. Adicionei aqui três linhas de código com o comentário "este é o código adicionado que causa o problema".
Mas ainda não entendo por que isso afeta o resultado.Estou trabalhando em um aplicativo cliente-servidor que envia objetos de dados via ObjectOutputStream e ObjectInputStream.
Percebi algo estranho que me fez pensar que talvez eu não entendesse completamente a referência a objetos.
No lado do cliente, tenho um método que cria e retorna um objeto Usuário:
private static User createNewUser()
{
User newUser = new User();
newUser.name = "Jim";
newUser.phone = "054-6885644";
..
return newUser;
}
Eu crio um objeto Usuário usando esse método, altero uma de suas propriedades e a envio ao servidor:
User user = createNewUser();
out.writeObject(user); // this is the added code that causes the problem
out.flush(); // this is the added code that causes the problem
system.out.println("old phone number: " + user.phone); // this prints out 054-6885644
user.phone = "052-9008801";
system.out.println("new phone number: " + user.phone); // this prints out 052-9008801
out.writeObject(user);
out.flush();
No lado do servidor, li o objeto:
User user = (User) in.readObject(); // this is the added code that causes the problem
User newProfile = (User) in.readObject();
System.out.println("phone number: " + newProfile.phone); // this prints out 054-6885644 (why??)
Então, como você pode ver, antes de transmitir o objeto, a propriedade foi atualizada. Mas depois que o servidor desserializa, ele obtém o valor da propriedade original. Por que é que?
A propósito, tentei clonar o objeto antes de transmiti-lo (criando um objeto totalmente diferente e apenas copiando os campos) e funcionou - o valor da propriedade não reverteu.
Então, por que isso está acontecendo? Por que a alteração na propriedade do objeto referenciado não é salva após o streaming?