2016-11-03 1 views
1

Я читаю чей-то код. Речь идет о получении входных чисел и преобразовании их в список связанных. Часть кода, как это:Почему мы можем использовать Node head = null без создания экземпляра 'head' в Java?

class Node { 
    int value; 
    Node next; 
    Node() { 
     next = null; 
    } 
} 

Во-первых, нам нужно создать head узел, чтобы указать голову и мы позволяем head быть пустым, как этот Node head = null.

Мои ограниченные впечатления от java говорят мне, что head должен быть объектом типа узла здесь. Итак, почему мы можем использовать Node head = null без создания экземпляра head?

Я думаю, по крайней мере, я должен создать Node head = new Node(); затем мы можем использовать Node head = null;

Любой может объяснить это мне?

+0

Зачем вам нужен объект, прежде чем вы сможете присвоить «null» ссылке? – Kayaman

+1

Нет никакого смысла в этом назначении, 'null' является значением по умолчанию для полей типа« Объект ». –

+0

Oracle предоставляет полезную информацию и учебные пособия для классов и объектов. Похоже, вам следует прочитать их, понять, как и почему работает ваш код: https://docs.oracle.com/javase/tutorial/java/javaOO/index.html. – Tom

ответ

1
Node head = null; 

В этой строке указано, что в связанном списке нет элементов. Это справедливо в Java и указывает, что хотя head может содержать объект Node (или объект производного класса), он в настоящее время пуст.

Чтобы добавить элемент в список, то, скорее всего, какой-то код, такой как:

public void addItemToLinkedList(int value) { 
    if (head == null) { 
     head = new Node(); 
     head.value = value; 
    } else { 
     ... 
    } 
} 

Так что, если нет первого узла (когда головка равна нулю), то голова создается. В противном случае, если глава уже существует, будет выполняться блок else, который будет искать конец списка и добавить другой узел.

+0

Почему руководитель может использовать Узел в качестве своего типа данных без экземпляра? – Jeffery

+0

Это просто означает, что 'head' может содержать объекты типа' Node' (или производные от 'Node'), но также может быть пустым - нуль указывает, что он пуст. Думайте о 'head' как о почтовом ящике. Он может содержать буквы или может быть пустым. – Jason

+0

Итак, если я скажу Узел кто-то = null; Это означает, что кто-то может содержать объект типа Node. Это не значит, что кто-то является объектом Node? – Jeffery

1

head должен быть тип узла объекта здесь

Это не является обязательным. Java позволяет head быть объектом Node, или null, чтобы указать, что head не ссылается ни на какие узлы.

Величина null является специальной на Java. Разрешается идти туда, куда может идти объект. Он указывает, что переменная, которой вы назначаете null, пуста. Это прекрасно, если предположить, что остальная часть вашей программы имеет дело с нулевой проверкой.

+0

Итак, если Java разрешала голове быть объектом Node, тогда хвост также может быть объектом Node, правильно? Как насчет prev и next, могут ли они быть и типа Node? Есть ли какой-нибудь документ, который я могу прочитать об объекте Node в java? Спасибо. – Jeffery

+0

@Jeffery * «Есть ли какой-нибудь документ, который я могу прочитать об объекте Node в java» * Я так не думаю, потому что 'Node' - ваш собственный класс (так ни одна другая страница не знает его). Но я связал страницу справки от Oracle об общих классах и объектах. Это может помочь вам. – Tom

+0

Хорошо, спасибо вам за помощь. ;) – Jeffery

Смежные вопросы