Изменение свойства объекта не сохраняется после потоковой передачи в Java

Обновление: ОК, поэтому я выделил части кода серым цветом и нашел причину проблемы. Я добавил сюда 3 строки кода с комментарием «это добавленный код, который вызывает проблему».

Но я до сих пор не понимаю, почему это влияет на результат.

Я работаю над клиент-серверным приложением, которое отправляет объекты данных через ObjectOutputStream и ObjectInputStream.

Я заметил что-то странное, что заставило меня подумать, что я не совсем понимаю ссылки на объекты.

На стороне клиента у меня есть метод, который создает и возвращает объект User:

private static User createNewUser()
{
    User newUser = new User();

    newUser.name = "Jim";
    newUser.phone = "054-6885644";
    ..

    return newUser;
}

Я создаю объект User с помощью этого метода, изменяю одно из его свойств и отправляю его на сервер:

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();

На стороне сервера я читаю объект:

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??)

Итак, как вы можете видеть, перед тем как я передал объект в поток, свойства были обновлены. Но после того, как сервер десериализует его, он получает первоначальное значение свойства. Это почему?

Кстати, я пытался клонировать объект перед его передачей (создавая совершенно другой объект и просто копируя поля), и это сработало - значение правильности не вернулось.

Так почему это происходит? Почему изменение свойства ссылочного объекта не сохраняется после потоковой передачи?

Ответы на вопрос(1)

Ваш ответ на вопрос