Java 具有嵌套节点类的树将编译,但插入节点将返回null

Java 具有嵌套节点类的树将编译,但插入节点将返回null,java,Java,我正在尝试将节点作为嵌套类插入到树中。我不明白为什么tree.root无法使用我的方法insertNode public class Tree { Node root; private class Node { int value; Node(int value) { this.value = value; } } public static void main(String[] args) { Tree tree = new Tr

我正在尝试将节点作为嵌套类插入到树中。我不明白为什么
tree.root
无法使用我的方法
insertNode

public class Tree {
  Node root;

  private class Node {
    int value;
    Node(int value) {
      this.value = value;
    }
  }

  public static void main(String[] args) {
    Tree tree = new Tree();
    tree.insertNode(4, tree.root);
    System.out.println(tree.root);

  }

  public void insertNode(int value, Node n){
    if(n == null ){
      n = new Node(value);
    }
  }   

}

>> null
我错过了什么?
感谢您的帮助

代码的作用如下:

  • 它创建一个新的
    。编译器将
    根节点
    初始化为默认值
    null
  • 您正在将某些内容“插入”到
    树中
    ,至少这是方法名称的含义。事实上,该方法除了将参数设置为默认值(如果参数为null)外,什么都不做
  • 您正在打印
    树的
    根节点
    ,该节点为
  • 我认为您应该更改
    insertNode
    方法,以便它实际修改
    树的状态

    编辑:当我读到你问题下面的评论时,我注意到一些我一开始遗漏的东西。在您的
    insertNode
    方法中,您可能正打算执行我上面描述的操作。但您所做的是不同的:您将某些内容分配给局部变量,而不是成员变量。以显式表示法编写,您希望执行以下操作:

    this.root = new Node(value)
    

    不同之处在于,在代码中,
    n
    不绑定到对象,而是绑定到
    树。root
    意味着对
    n
    的更改(更准确地说是赋值)将不会持久,并且在方法返回时将无效。如果您将一个对象分配给
    Tree.root
    ,则此更改将反映在
    Tree
    对象中。

    您不了解代码的哪些部分在做什么?@nbro我认为问题在于,当我使用insertNode时,保存到Tree.root的节点不会保存在方法之外。超出其范围?我不明白为什么这是“我保存到tree.root的节点”,你在哪里保存它?提示:没有<代码>n
    是对对象的引用,而不是要向其中添加节点的对象的字段。研究Java中引用和对象之间以及变量、参数、字段等之间的差异。@Siguza该链接有帮助!谢谢,我不知道现在该怎么办。在阅读了关于“IsJava”的“passbyreference”之后,您的答案是,我认为答案应该是“tree.insertNode(5);void insertNode(int v){this.root=new Node(v);}`但是下一步,构建二叉树,让我感到困惑。我应该编辑这个问题吗?还是开始一个新的?你回答了我的问题:)所以我接受了你的回答。非常感谢。