GC удаляет объект по выходу из метода
Пытаюсь реализовать стек на основе односвязного списка и сталкиваюсь с проблемой: по выходу из метода push() вновь созданный узел удаляется из памяти несмотря на то, что на него ссылается head.
public class Stack<T> {
private class Node<T> {
public T value;
public Node<T> pref;
public Node(T v, Node<T> n) {
value = v;
pref = n;
}
}
private Node<T> head;
private int size;
public void push(T value) {
Node<T> newNode = new Node<>(value, head);
head = newNode;
size++;
}
public void pop() {
if(isEmpty()) {
throw new NullPointerException("Remove from empty stack");
}
head = head.pref;
size--;
}
public boolean isEmpty() {
return head == null;
}
public int size() {
return size;
}
@Override
public String toString() {
if(isEmpty()) {
return "EMPTY";
} else {
String res = "";
while(true) {
res += head.value.toString();
pop();
if(isEmpty()) {
break;
}
res += " -> ";
}
return res;
}
}
public Stack<T> reverse() {
Stack<T> reverseStack = new Stack<>();
while(!isEmpty()) {
reverseStack.push(head.value);
pop();
}
return reverseStack;
}
}
Источник: Stack Overflow на русском