Изменение значения переменной узла связанного списка в Java. - PullRequest
0 голосов
/ 02 июля 2018

В приведенном ниже коде, почему, когда я меняю переменную узла два на ноль, первая переменная узла все еще имеет следующее значение 2?

 public static void main(String[] args) {
    Node one = new Node(1);
    Node two = new Node(2);
    one.next = two;

    System.out.println(one.val + ", " + one.next.val); //1, 2
    two = null; //one.next.val is still 2
    System.out.println(one.val + ", " + one.next.val); //1 ,2
}

static class Node {
    int val;
    Node next;
    public Node(int val) {
    this.val = val;
    }
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

При создании:

Node one = new Node(1);
Node two = new Node(2);

Вы создаете два Node объекта, т.е. Node(1) и Node(2) и две ссылки (т.е. one и two)

Теперь, когда вы делаете

one.next = two;

Вы создаете не новый объект, а новую ссылку на объект Node(2).

Итак, теперь у вас есть два объекта (Node(1) и Node(2)) и три ссылки, т.е. one, two и one.next.

Когда вы делаете

two = null;

Удаляет ссылку two. Но обратите внимание, что вы все еще можете получить доступ к объекту Node(2) через его вторую ссылку, т.е. one.next.

0 голосов
/ 02 июля 2018

вам нужно установить ссылку one.next на ноль, чтобы он не существовал. Линия

two = null;

устанавливает объект два, чтобы указывать на ноль и больше не на предыдущий узел с val 2, но он продолжает существовать, и узел один все еще указывает на него.

one.next = null; 

После того, как вы укажете one.next на ноль, ссылка на объект больше не будет, и объект будет потерян и собран сборщиком мусора позже

...