这使得movie4 指向movie1:
Movie movie4 = movie1;
但是,那么您立即更新了movie4 以指向一个不同的 对象:
movie4 = new Movie("The Return of the King", 2003, 8.9);
因此,此时movie1 和movie4 不再指向同一个Movie,因此您通过movie4 所做的更改不会影响movie1 指向的对象。
如果您更改对象而不替换movie4:
Movie movie4 = movie1;
movie4.name = "The Return of the King";
...那么无论您查看movie1.name 还是movie4.name,您都会看到对象的变化。
更多细节:
在你这样做之后:
Movie movie1 = new Movie("The Shawshank Redemption", 1994, 9.3);
Movie movie2 = new Movie("The Godfather", 1972, 9.2);
Movie movie3 = new Movie("The Dark Knight", 2008, 9.0);
...你的记忆中有这样的东西(省略了很多细节):
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影1:Ref4516−−−−−−−>| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:“肖申克……” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影2:Ref8469−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《教父》|
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影3:Ref4789−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《黑暗骑士》 |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
然后你这样做了:
Movie movie4 = movie1;
...使movie4 和movie1 指向同一部电影:
电影1:Ref4516−−−+
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−>| (电影) |
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影4:Ref4516−−−+ |名称:“肖申克……” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影2:Ref8469−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《教父》|
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影3:Ref4789−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《黑暗骑士》 |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
到目前为止,一切都很好,但后来你做到了:
movie4 = new Movie("The Return of the King", /*...*/);
...这使得movie4 指向一个新对象:
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影1:Ref4516−−−−−−−>| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:“肖申克……” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影2:Ref8469−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《教父》|
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影3:Ref4789−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《黑暗骑士》 |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
movie4:Ref9546−−−−−−−>| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:“...的回归” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
因此,分配给 movie4.name 只会更改新对象,而不是 movie1 指向的对象。
如果您没有这样做movie4 = new Movie(/*...*/) 位,那么movie1 和movie4 仍然指向同一个对象
电影1:Ref4516−−−+
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−>| (电影) |
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影4:Ref4516−−−+ |名称:“肖申克……” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影2:Ref8469−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《教父》|
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影3:Ref4789−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《黑暗骑士》 |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
...然后分配给movie4.name 将更改movie4 和movie1 都指向的对象:
movie4.name = "The Return of the King";
电影1:Ref4516−−−+
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−>| (电影) |
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影4:Ref4516−−−+ |名称:“...的回归” |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影2:Ref8469−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《教父》|
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
电影3:Ref4789−−−−−−−->| (电影) |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
|名称:《黑暗骑士》 |
| ... |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−+