我在 vo4 对象中保留了 vo1 对象的副本,而不是引用。
不,您已将变量 vo1 和 vo4 指向 same 对象,如下所示:
+-----+
| vo1 |--------\
+-----+ \ +----------------+
--->| (对象) |
+-----+ / |姓名 = 阿比舍克 |
| vo4 |--------/ +----------------+
+-----+
让我们按照代码来:
VO vo1 = new VO();
给我们:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ |名称 = 空 |
+----------------+
然后:
VO vo2 = new VO();
现在我们有了:
+-----+ +----------------+
| vo1 |-------------->| (对象) |
+-----+ |名称 = 空 |
+----------------+
+-----+ +----------------+
| vo2 |-------------->| (对象) |
+-----+ |名称 = 空 |
+----------------+
然后:
VO vo3;
...它只是用null 创建vo3(不指向任何对象)。
然后:
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 |-------------->| (对象) |
+-----+ |姓名 = 阿尼尔 |
+----------------+
...所以getName() on vo1、vo3 或 vo4 会给你“Abishek”。