Kor*_*lex 2 java reference object
在Java中,所有变量都按值传递.对于对象,这意味着我们传递对象的引用.我对以下情况感到困惑.假设我们有一个对象图.一个对象包含对另一个对象的字段引用,该对象引用了另一个对象,如:user.address.city.这里我们有类User的实例,该实例引用了类Address的实例,该类具有String - city类型的字段.现在假设我们有2个用户:
User bob = new User();
User mary = new User();
Run Code Online (Sandbox Code Playgroud)
假设对象'bob'引用了地址对象:
Address bobAddress = new Address();
bobAddress.setCity("New York");
bob.setAddress(bobAddress);
Run Code Online (Sandbox Code Playgroud)
让我们说玛丽和鲍勃开始住在一个房子里,他们有相同的地址,没问题:
mary.setAddress(bobAddress);
Run Code Online (Sandbox Code Playgroud)
现在,mary和bob引用了一个地址对象.但是有一天他们离婚和玛丽现在还有另一个地址:
mary.getAddress().setCity("Boston");
Run Code Online (Sandbox Code Playgroud)
在这里我们遇到了一个问题:Mary在她的地址中改变了一些内容,但她也更改了Bob的地址,因为他们共享相同的引用.
上面的所有文字都是我尝试以小规模描述一个大问题:当我在将该对象的引用设置为另一个实例之前创建一个对象的副本(克隆)时?是否存在某些规则或技术?我知道使用这些对象的不可变对象(例如String,Integer ...),我们根本不需要考虑这些问题,但如果我有可变对象怎么办呢.我应该如何表现?
你的问题表明Address班级设计不好.
Address类表示地理位置并且是固定的.当个人移动时,地理位置不会改变; 相反,个人居住的地理位置会发生变化.
删除Address的setter并使其成为不可变对象.当个人移动时,您必须执行以下操作之一:
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |