java 三个引用之间的对象赋值
java object assignment between three references
我一直在学习编程面试,我有一个关于 java 对象分配的问题。
假设我有一个节点 class 并且我创建了三个实例。
Node a = new Node(1);
Node b = new Node(2);
Node c = new Node(3);
现在假设我做一个作业
a = b;
此时我知道我对节点 a 或 b 的属性所做的任何更改都会导致 a 和 b 的更改,因为这是一个浅拷贝。
即
a.data = 99 //then b.data will become 99
或
b.data = 99 //then a.data will become 99
但是如果我这样做
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;
。现在 2 个引用引用同一个对象。包含 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
改变时不受影响的原因。他们又指代了不同的对象。
我一直在学习编程面试,我有一个关于 java 对象分配的问题。
假设我有一个节点 class 并且我创建了三个实例。
Node a = new Node(1);
Node b = new Node(2);
Node c = new Node(3);
现在假设我做一个作业
a = b;
此时我知道我对节点 a 或 b 的属性所做的任何更改都会导致 a 和 b 的更改,因为这是一个浅拷贝。
即
a.data = 99 //then b.data will become 99
或
b.data = 99 //then a.data will become 99
但是如果我这样做
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;
。现在 2 个引用引用同一个对象。包含 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
改变时不受影响的原因。他们又指代了不同的对象。