Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:传递未实例化的对象引用是如何工作的?_Java_Tree_Binary Tree_Pass By Value - Fatal编程技术网

Java:传递未实例化的对象引用是如何工作的?

Java:传递未实例化的对象引用是如何工作的?,java,tree,binary-tree,pass-by-value,Java,Tree,Binary Tree,Pass By Value,这里有一个例子来说明我的意思 如果我有一个接受节点的二叉树插入方法,并将其传递给parent.child(未实例化),那么传递的究竟是什么 因为Java是按值传递的,所以它必须传递引用的一个副本,但没有任何对象指向将发生什么?这是否意味着我正在传递一个与父节点无关的空引用 不幸的是,我没有任何代码,因为这实际上是一个传递给我的问题,我不能很好地把它放在一起。我的解决方案是传递一个已经实例化的父节点,然后实例化parent.child,下面是一个示例。考虑类型< /P> class Node {

这里有一个例子来说明我的意思

如果我有一个接受节点的二叉树插入方法,并将其传递给parent.child(未实例化),那么传递的究竟是什么

因为Java是按值传递的,所以它必须传递引用的一个副本,但没有任何对象指向将发生什么?这是否意味着我正在传递一个与父节点无关的空引用


不幸的是,我没有任何代码,因为这实际上是一个传递给我的问题,我不能很好地把它放在一起。我的解决方案是传递一个已经实例化的父节点,然后实例化parent.child,下面是一个示例。考虑类型< /P>
class Node {
    Node child;
}

Node parent = new Node();
// here, parent.child == null
所以,假设
null
是一个特殊的值,比如0x0000,在内存中的某个地方(YMMV),有一个

0x1000: Start of Node Object
0x1004: 0x0000 (child field offset)
...
0x6000: 0x1000 (parent variable)
换句话说,有一个
节点
对象,它的
字段存储
null
作为其值。此外,还有一个变量
parent
存储
节点
对象的值(排序地址)

当你这样做的时候

public void insert(Node node) {/* implementation */}
...
tree.insert(parent.child);
您正在解除对父项的引用,从而获取其地址
0x1000
,计算其子项
字段的偏移量
0x1004
,并获取其值
0x0000
。然后将该值复制到堆栈上。方法调用将从堆栈中弹出该值,并将其绑定到这个新的
节点
变量。现在你有了

0x1000: Start of Node Object
0x1004: 0x0000 (child field offset) // null
...
0x6000: 0x1000 (parent variable)
...
0x8000: 0x0000 (node variable) // null
回答你的问题

这是否意味着我传递的是一个空引用,与 父节点


您正在传递一个
null
引用。无法从绑定参数中检索父级引用的任何内容。

我不确定您的意思。但任何引用,无论是实例成员、静态成员还是局部变量,都会自动初始化为
null
,直到您为其分配了其他内容。如果将其作为参数传递,则参数将为
null
。如果未实例化某个对象,则将其初始化为默认值。布尔型为False,其他大多数灵长类为0,引用类型为null。是的,您将传递一个指向null的指针。