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中的一些东西?
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)
| 归档时间: |
|
| 查看次数: |
1641 次 |
| 最近记录: |