Заннулить (присвоить null) объект Java
застрял на какой-то странной проблеме, даже абсурдной.
Создаю бинарное дерево, вопрос в зануллении объекта.

Имею в методе удаления элемента дерева (public boolean remove(Object o) локальную перменную entry, которая ссылается на поле класса root - самый верхний объект, то есть 0. Когда прописываю entry = null, объект элемента не становится null, допустим, элемент 3, он продолжает жить. Не могу понять, почему это происходит, когда ссылка 3-ого элемента уходит именно в иерархию ссылок root. Естественно, если я обращаюсь через поле к элементу 7 и 8, то они становятся null.
Внутри класса CustomTree:
public boolean remove(Object o) {
if(!(o instanceof String)) {
throw new UnsupportedOperationException();
}
Entry<String> entry = root;
Entry<String> parent;
Queue<Entry<String>> queue = new ArrayDeque<>();
String s = String.valueOf(o);
boolean isDeletedElement = false;
queue.add(entry);
while(!queue.isEmpty()) {
entry = queue.poll();
if(entry.getElementName().equals(s)) {
while(!queue.isEmpty()) {
queue.remove();
}
isDeletedElement = true;
}
if(!entry.isAvailableToAddChildren()){
queue.add(entry.leftChild);
queue.add(entry.rightChild);
}
if(isDeletedElement) {
entry.leftChild = null;
entry.rightChild = null;
// entry = null; В ИЕРАРХИИ root ОН НЕ null
}
}
return isDeletedElement;
}
Сам Entry вложен в класс CustomTree:
static class Entry<T> implements Serializable {
private static final long serialVersionUID = 1L;
String elementName;
boolean availableToAddLeftChildren;
boolean availableToAddRightChildren;
Entry<T> parent, leftChild, rightChild;
public Entry(String elementName) {
this.elementName = elementName;
availableToAddLeftChildren = true;
availableToAddRightChildren = true;
}
public boolean isAvailableToAddChildren() {
return availableToAddLeftChildren || availableToAddRightChildren;
}
public String getElementName() {
return elementName;
}
}
В поле CustomTree объявлено Entry root; Возможно, проблема решится, если добавить в Entry класс переменную thisEntry класса Entry, указывающая на самого себя.
Ответы (1 шт):
Совершенно верно, в java всё передаётся по значению, т.е. все изменения затрагивают только локальную копию. Но для объектов можно изменять состояние и эти изменения будут видны вне метода.