三个引用之间的java对象赋值
我一直在学习编程面试,我有一个关于java对象分配的问题 假设我有一个节点类,我创建了三个实例三个引用之间的java对象赋值,java,object,copy,deep-copy,Java,Object,Copy,Deep Copy,我一直在学习编程面试,我有一个关于java对象分配的问题 假设我有一个节点类,我创建了三个实例 Node a = new Node(1); Node b = new Node(2); Node c = new Node(3); 现在让我们假设我做了一个任务 a = b; 在这一点上,我知道我对节点a或b的属性所做的任何更改都将导致对a和b的更改,因为这是一个浅拷贝 i、 e 或 然而,如果我这样做 b = c; 现在,我对节点b的属性所做的任何更改都不会对节点a产生任何影响 b.data
Node a = new Node(1);
Node b = new Node(2);
Node c = new Node(3);
现在让我们假设我做了一个任务
a = b;
在这一点上,我知道我对节点a或b的属性所做的任何更改都将导致对a和b的更改,因为这是一个浅拷贝 i、 e 或 然而,如果我这样做
b = c;
现在,我对节点b的属性所做的任何更改都不会对节点a产生任何影响
b.data = 99;//then b.data will become 99 and c.data will become 99 but a.data will not change
我不理解这种行为。我知道节点b被分配了节点c地址的值,但这为什么不影响节点a?将
b
分配给c
引用的对象不会影响a
,因为b
不再引用a
引用的相同对象。下面是正在发生的事情:
a -> (1)
b -> (2)
c -> (3)
现在a=b代码>被执行。现在两个引用引用同一个对象。包含1
的节点不再有对它的任何引用,可以随时对其进行垃圾收集
a -\ (1)
\
b ---> (2)
c ---> (3)
现在b=c代码>被执行。这不影响a
引用其对象的方式
a --\ (1)
\
b -\ > (2)
\
c ----> (3)
现在b
和c
指向包含3
的节点,而a
继续指向包含(2)的节点。这就是为什么a.data
在更改b.data
时不受影响的原因。它们再次引用了不同的对象。“此时,我知道我对节点a或b的属性所做的任何更改都将导致a和b的更改,因为这是一个浅拷贝。”不,这是不正确的。您只能对每个引用指向的对象本身进行更改。欢迎使用StackOverflow。请花几分钟时间访问并阅读。我们要求您在发帖前进行充分的在线调查,以确保您的问题不会被简单的谷歌搜索(即Java参考作业)轻易回答。
a -\ (1)
\
b ---> (2)
c ---> (3)
a --\ (1)
\
b -\ > (2)
\
c ----> (3)