Решил написать простейший метод - опустошить узел.
public static void Node <Integer> n1 (Node <Integer> n1)
{
while (n1 != null)
n1 = n1.getNext();
}
Обнаружил что узел не изменился. Перенёс цикл в главный метод - работает.
Вопрос таков: почему узел не изменился внутри метода, узел ведь объект? Почему стеки, очереди, массивы и другие объекты изменяются внутри методов void
, а узел нет?
UPD: этот метод который изменяет добавляет в узел цепь в конец узла работает.
public static void what (Node <Integer> n1, int a)
{
while (n1.hasNext())
n1 = n1.getNext();
Node <Integer> n7 = new Node <Integer> (a);
n1.setNext(n7);
}
Вы не до конца поняли как это работает.
В метод передается ссылка на объект, пусть это будет ссылка, которая смотрит на объект n1
: A -> n1
Когда вы в своем методе выполняете операцию присваивания n1 = n1.getNext();
ваша ссылка будет смотреть на следующий Node
, A -> n1.getNext()
, при этом сам Node
n1
не изменится, а вы хотите изменить именно его.
Вот вам пример:
public void example(){
List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3));
wrongChangeList(list);
System.out.println(list);
correctChangeList(list);
System.out.println(list);
}
private void correctChangeList(List<Integer> list){
list.clear();
list.addAll(Arrays.asList(10, 20, 30));
}
private void wrongChangeList(List<Integer> list){
list = Arrays.asList(10, 20, 30);
}
[1, 2, 3]
[10, 20, 30]
При вызове wrongChangeList
ваш внешний список не изменится, изменится лишь ссылка внутри метода wrongChangeList
Во втором случае мы изменяем непосредственно объект.
Надеюсь, вы сможете на основе этого понять, как работает ваш второй метод и почему не работает первый.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Идея в следующем: есть узел locations/ns/we и есть узел users/location/ который содержит ключи ns и weПри нажатии на кнопку, координаты и на 1 и на 2 узле изменяются,...
Пользователь должен ввести текст на языке BBCodeЭтот текст отправляется на сервер и возвращается на страницу в виде HTML
При попытке маршалинга бинарных данных в структуру происходит инверсия байтов внутри полей структуры те