我在 vo4 对象中保留了 vo1 对象的副本,而不是引用。
不,你已经指出了变量vo1
and vo4
at the same对象,像这样:
+-----+
| vo1 |--------\
+-----+ \ +----------------+
--->| (object) |
+-----+ / | name = Abishek |
| vo4 |--------/ +----------------+
+-----+
让我们按照代码进行操作:
VO vo1 = new VO();
给我们:
+-----+ +----------------+
| vo1 |------------->| (object) |
+-----+ | name = null |
+----------------+
Then:
VO vo2 = new VO();
现在我们有:
+-----+ +----------------+
| vo1 |------------->| (object) |
+-----+ | name = null |
+----------------+
+-----+ +----------------+
| vo2 |------------->| (object) |
+-----+ | name = null |
+----------------+
Then:
VO vo3;
...这只会创建vo3
with null
(不指向任何物体)。
Then:
VO vo4 = new VO();
所以我们有:
+-----+ +----------------+
| vo1 |------------->| (object) |
+-----+ | name = null |
+----------------+
+-----+ +----------------+
| vo2 |------------->| (object) |
+-----+ | name = null |
+----------------+
+-----+
| vo3 | (is null)
+-----+
+-----+ +----------------+
| vo4 |------------->| (object) |
+-----+ | name = null |
+----------------+
Now:
vo1.setName("Sourav");
vo2.setName("Anil");
给我们:
+-----+ +----------------+
| vo1 |------------->| (object) |
+-----+ | name = Sourav | *** change is here ***
+----------------+
+-----+ +----------------+
| vo2 |------------->| (object) |
+-----+ | name = Anil | *** and here ***
+----------------+
+-----+
| vo3 | (is null)
+-----+
+-----+ +----------------+
| vo4 |------------->| (object) |
+-----+ | name = null |
+----------------+
这就是事情变得有趣的地方:
vo3 = vo1;
vo4 = vo1;
那点vo3
在同一个物体上vo1
指向,并指向vo4
也针对那个物体,释放物体vo4
用于指向(有资格进行垃圾收集)。给我们:
+-----+
| vo1 |----\
+-----+ \
\
+-----+ \ +----------------+
| vo3 |------------->| (object) |
+-----+ / | name = Sourav |
/ +----------------+
+-----+ /
| vo4 |----/
+-----+
+-----+ +----------------+
| vo2 |------------->| (object) |
+-----+ | name = Anil |
+----------------+
Now
System.out.println(" " + vo4.getName());
...如您所料,给我们“Sourav”。
Then
vo1.setName("Abhishek.");
...改变对象vo1
, vo3
, and vo4
都指向:
+-----+
| vo1 |----\
+-----+ \
\
+-----+ \ +----------------+
| vo3 |------------->| (object) |
+-----+ / | name = Abishek |
/ +----------------+
+-----+ /
| vo4 |----/
+-----+
+-----+ +----------------+
| vo2 |------------->| (object) |
+-----+ | name = Anil |
+----------------+
...所以getName()
on vo1
, vo3
, or vo4
会给你“Abishek”。