Копирование ссылок на объекты в Java
При присваивании объекта другой переменной копируется не сам экземпляр, а ссылка на него. Обе переменные указывают на один объект в памяти:
class Post {
public String title = "";
public String text = "";
}
Создадим запись, скопируем ссылку и сравним оба имени через ==:
Post post = new Post();
post.title = "News";
Post alias = post;
System.out.println(post == alias);
Изменение поля по одной переменной видно и у второй - меняется общий объект:
Post post = new Post();
post.title = "News";
Post copy = post;
copy.title = "Tips";
System.out.println(post.title);
System.out.println(copy.title);
Так же ведут себя объекты внутри массива или списка: элемент хранит ссылку, и изменение полей объекта сохраняется для всех переменных с той же ссылкой:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Post> posts = new ArrayList<>();
Post draft = new Post();
draft.text = "Work";
posts.add(draft);
Post fromList = posts.get(0);
fromList.text = "Done";
System.out.println(posts.get(0).text);
}
}
Создайте объект Employee и присвойте его переменной copy.
Измените заголовок в copy. Выведите заголовок
из исходной переменной.
Запишите объект Employee в элемент списка.
Возьмите этот элемент в отдельную переменную,
измените зарплату. Выведите зарплату из списка.