我在 vo4 对象中保留了 vo1 对象的副本,而不是参考。
不,您已将变量指向同vo1
一个对象,如下所示:vo4
+-----+
| vo1 |--------\
+-----+ \ +----------------+
--->| (对象) |
+-----+ / | 姓名 = 阿比舍克 |
| vo4 |--------/ +----------------+
+-----+
让我们通过以下代码:
VO vo1 = new VO();
给我们:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
然后:
VO vo2 = new VO();
现在我们有:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
然后:
VO vo3;
...它只是vo3
用null
(不指向任何对象)创建。
然后:
VO vo4 = new VO();
所以我们有:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
+-----+
| vo3 | (一片空白)
+-----+
+-----+ +----------------+
| vo4 |------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
现在:
vo1.setName("Sourav");
vo2.setName("Anil");
给我们:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ | 姓名 = 苏拉夫 | ***变化就在这里***
+----------------+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ | 姓名 = 阿尼尔 | *** 和这里 ***
+----------------+
+-----+
| vo3 | (一片空白)
+-----+
+-----+ +----------------+
| vo4 |------------->| (对象) |
+-----+ | 名称 = 空 |
+----------------+
这就是事情变得有趣的地方:
vo3 = vo1;
vo4 = vo1;
指向vo3
同一个对象vo1
,也指向vo4
该对象,释放vo4
用于指向的对象(这变得有资格进行垃圾收集)。给我们:
+-----+
| vo1 |----\
+-----+ \
\
+-----+ \ +----------------+
| vo3 |------------->| (对象) |
+-----+ / | 姓名 = 苏拉夫 |
/ +----------------+
+-----+ /
| vo4 |----/
+-----+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ | 姓名 = 阿尼尔 |
+----------------+
现在
System.out.println(" " + vo4.getName());
...如您所料,给了我们“Sourav”。
然后
vo1.setName("Abhishek.");
...更改vo1
、vo3
和vo4
都指向的对象:
+-----+
| vo1 |----\
+-----+ \
\
+-----+ \ +----------------+
| vo3 |------------->| (对象) |
+-----+ / | 姓名 = 阿比舍克 |
/ +----------------+
+-----+ /
| vo4 |----/
+-----+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ | 姓名 = 阿尼尔 |
+----------------+
...等等,,或者会给你“Abishek” getName()
。vo1
vo3
vo4