在Java中,所有变量都是按值传递的。 对于对象, 这意味着我们通过对象的引用。 我很困惑以下情况。 假设我们有一个对象图。 一个对象包含另一个对象的字段引用, 该对象引用另一个对象,如:user.address.city。 在这里,我们有类User的实例, 该实例具有对类型为String - city的字段类Address的实例的引用。 现在让我们说我们有2个用户:Java中的对象和引用
User bob = new User();
User mary = new User();
假设对象“鲍勃”具有参考地址对象:
Address bobAddress = new Address();
bobAddress.setCity("New York");
bob.setAddress(bobAddress);
比方说,玛丽和鲍勃开始在一个房子住在一起,他们有相同的地址, 没有问题:
mary.setAddress(bobAddress);
现在玛丽和Bob引用一个地址对象。 但是有一天他们离婚和玛丽现在有另一个地址:
mary.getAddress().setCity("Boston");
在这里,我们有一个问题: 玛丽在她的地址改变的东西, 但她也改变了Bob的地址, 因为它们共享相同的参考。
以上所有文本都是我的尝试,以小规模描述一个大问题: 当我应该在将该对象的引用设置为另一个实例之前创建某个对象的副本(克隆)时? 是否存在一些规则或技术? 我知道有关这些对象的不可变对象(例如String,Integer等),我们不需要考虑这些问题,但是如果我有可变对象。 我应该如何与他们共事?
你完全理解力学/语言。但是你说得对,你的*设计*会产生这个问题,因此不起作用。因此,我为什么提高了设计修正。 – djechlin 2014-09-25 20:28:15