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?

questionAnswers(1)

yourAnswerToTheQuestion