Java引用不作为指针?

NSF*_*NSF 2 java pass-by-reference

这是我的算法中的一段代码:

public void insert(int element) {
    _insert(element, root);
    System.out.println(root);
}

private void _insert (int element, Node t) {
    if (t == null) {
        t = new Node(null, element);;
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

Node 这是一个预定义的类.

insert调用public方法时,将调用private方法并检查树是否为空.如果是,则在root位置创建新节点.

输出应该是一个节点.但实际输出null意味着root不会更新,尽管它作为t传递给私有方法.

这应该在带有指针的C++下工作.也许我误解了Java中的一些东西?

Mar*_*ers 6

Java总是使用pass-by-value进行方法调用.将引用类型传递给方法时,会生成引用副本.

以下行更改t为引用新对象,但它不会更改原始变量root:

t = new Node(null, element);
Run Code Online (Sandbox Code Playgroud)

您可以更改方法以返回插入的节点,如下所示:

private Node _insert (int element, Node t) {
    if (t == null) {
        t = new Node(null, element);
    }
    return t;
}
Run Code Online (Sandbox Code Playgroud)

并且这样打电话:

root = _insert(element, root);
Run Code Online (Sandbox Code Playgroud)

  • @NSF:Java中没有pass-by-reference.可以将引用放在另一个对象中,并改变该对象.但我展示的方法更简单,更清洁. (6认同)