Прежде чем я покажу свою проблему, я понимаю следующее: Java использует передачу по значению.
Сказал, что в примере ниже я передаю ссылку "my_root" в NodeModify (),
и в строке «NodeModify (my_root);» ожидайте, что компилятор передаст копию адреса памяти «my_root» и внутри функции make «root = new_node;» ie => ожидайте, что место / адрес в памяти root будет обновлено до / указывать на место, где находится "new_node".
Удивительно, но это не отражается в функции main (), откуда она была вызвана, почему это так?
package com.trees;
public class NodeExample {
public static void NodeModify(Node root){
System.out.println("[NodeModify] fresh root is : " + root);
Node new_node = new Node(0);
System.out.println("[NodeModify] new node is : " + new_node);
root = new_node;
System.out.println("[NodeModify] root is : " + root);
}
public static void main(String[]arg){
Node my_root = new Node(55);
System.out.println("my root before NodeModify is: " + my_root);
NodeModify(my_root);
System.out.println("my root after NodeModify is: " + my_root);
}
}
Однако, если я сделаю то же самое с другой ссылкой, например ArrayList, она будет обновляться в main (), как я и ожидал! Пример:
package com.trees;
import java.util.ArrayList;
public class ArrayListUpdateClass {
public static void updateMyArrayList(ArrayList<String> sample){
sample.add("was updated!");
}
public static void main(String[]args){
ArrayList<String> my_list = new ArrayList<String>();
my_list.add("My list ");
System.out.println("**Before call list is:**");
printArrayList(my_list);
updateMyArrayList(my_list);
System.out.println("\n**After call list is:**");
printArrayList(my_list);
}
private static void printArrayList(ArrayList<String> my_list) {
for(String item:my_list){
System.out.println(item);
}
}
}
Что мне здесь не хватает, мне было трудно обновить корневой узел при создании двоичного дерева.