Java 对象数组初始化
我正在重新提出我的问题 有3个引用变量root1、root2、root3,它们包含在引用数组中(root[]={root1、root2、root3}) 我为根[0]初始化了对象,希望根[0]引用根1,因此我希望根1.data和根[0]。data访问相同的值。但是我无法使用根1.data访问它,而我可以使用根[0]。data访问它Java 对象数组初始化,java,arrays,object,Java,Arrays,Object,我正在重新提出我的问题 有3个引用变量root1、root2、root3,它们包含在引用数组中(root[]={root1、root2、root3}) 我为根[0]初始化了对象,希望根[0]引用根1,因此我希望根1.data和根[0]。data访问相同的值。但是我无法使用根1.data访问它,而我可以使用根[0]。data访问它 public class testing { static Node root1,root2,root3; public static void main(S
public class testing
{
static Node root1,root2,root3;
public static void main(String[] args)
{
Node root[]={root1,root2,root3};
root[0]=new Node(2,null);
System.out.println("root[0]="+root[0].data);//It is working properly
System.out.println("root1="+root1.data);//It is not working properly
}
public static class Node
{
int data;
Node next;
Node(int data,Node next)
{
this.next=next;
this.data=data;
}
}
}
不,它们不应该访问相同的值 初始化数组后,只需在每个节点中输入一个空值
root[0]=new Node(null,2);
新创建的节点将被数组中的第一个节点引用,array1的值仍然为null
root1=new Node(null,3);
现在root1 one指向新节点变量和数组元素都是对对象的引用。它们不是实际的对象 为了举例说明,我将使用数字方案“命名”实际对象,例如#1是第一个对象 您的代码运行如下:
- 类由JVM初始化,
、root1
和root2
都是root3
null
- 执行
,它创建一个长度为3的Node root[]={root1,root2,root3}
对象(#1),并复制Node[]
,root1
和root2
的root3
空值。该代码相当于:
Node[] root = new Node[3]; root[0] = root1; root[1] = root2; root[2] = root3;
并创建一个root[0]=执行新节点(null,2)
对象(#2)并将其分配给节点
。请注意,root[0]
保持为root1
null
并创建一个root1=执行新节点(null,3)
对象(#3)并将其分配给节点
。请注意,root1
仍然引用#2root[0]
- 打印
,由于root[0]的值。数据
references#2,它将打印root[0]
2
- 打印
的值,由于root1.data
引用了#3,它将打印root1
3
一切都按其应有的方式运行。请查看具有相同行为的简化代码:
public class Testing2 {
public static void main(String[] args) {
Node r1 = new Node(1);
Node r2 = r1;
r1 = new Node(2);
System.out.println("r1=" + r1.data);// prints 2
System.out.println("r2=" + r2.data);// prints 1
}
public static class Node {
int data;
Node(int data) {
this.data = data;
}
}
}
了解r1和r2指向节点对象是非常重要的。在某些语言中,r1和r2被称为指针,在Java中,它们被称为引用
执行时:
Node r1 = new Node(1);
r1指向数据为1的节点实例
r1 -> Node.data=1
之后
Node r2 = r1;
r1和r2都指向同一个节点实例
r1 -> Node.data=1 <- r2
你有
Node.data=1 <- r2
r1 -> Node.data=2
Node.data=1个Node.data=2
这解释了程序的输出 为什么需要所有节点都是静态的?尝试不使用静态修饰符,但使用主要方法。为什么要重新发布问题?改为编辑原始问题。我投票结束这个问题,作为原始问题的重复。请友好。
Node.data=1 <- r2
r1 -> Node.data=2