Является ли Java LinkedList мелкой копией или глубокой копией по умолчанию? - PullRequest
0 голосов
/ 28 января 2019

Я не уверен, является ли узел связанного списка по умолчанию мелкой копией или глубокой копией.Например, когда у нас есть следующий код:

ListNode left = new ListNode(0);
ListNode temp = left;

temp.next = new ListNode(3);
temp = temp.next;

Изменит ли этот оператор temp = temp.next также левый узел на temp.next?Почему?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это ни то, ни другое, здесь нет копирования, и, возможно, вы путаете ссылки с копиями, поскольку это две разные вещи.Каждый узел содержит ссылку на следующий узел, если он существует, или на ноль, если это не так.

«Копия» - это место, где вы создаете совершенно новый экземпляр типа, который копируетсостояние существующего экземпляра того же типа, мелкое, если новый экземпляр содержит поля ссылок, которые содержат точно такие же ссылки на оригинал, и глубокий, если поля ссылок нового экземпляра содержат новые экземпляры, которые имеют то же состояние, что и оригинал, ..... но нигде в вашем вопросе вы не создаете новые экземпляры копий, глубокие или неглубокие.

0 голосов
/ 28 января 2019

Java - это не C ++, который будет копировать экземпляры, построенные на стековой памяти.Таким образом, все объекты Java создаются в динамической памяти, поэтому не возникает никаких задач копирования.

Я думаю, что вы пришли из C ++, который в C ++ объект, который он был создан в памяти стека, будет копироваться, когда выпередают его в качестве параметров или присваивают другим переменным, кроме случаев, когда вы создали ключевое слово new.Но объекты Java обычно создаются в куче, и поэтому не будет никакой задачи копирования.Так что будьте осторожны с объектами Java, но будьте осторожны с объектами C ++ (в стеке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...