我有一个像这样的User.class:
public class User {
private HashSet<Client> clients;
...
public void addClient(Client c) {
c.setParentUser(this);
clients.add(c);
}
客户端类:
public class Client {
private User parentUser;
public void setParentUser(User u) {
parentUser = u;
}
...
}
我的问题是,在c.setParentUser(this)
,我的意图是给持有客户的用户一个“指针”。
所以我的问题是:c.setParentUser(this)
只会在客户端存储引用,还是会创建一个与this
(用户)完全相同的新对象?
答案 0 :(得分:5)
它存储引用,如C / C ++指针。变量parentUser
引用与this
相同的对象(在User
类中)。
如果你想制作副本,你需要明确地这样做。
答案 1 :(得分:2)
这是参考,而不是副本。
Java中除primitives(int,double等)之外的所有内容都是引用。如果我写:
String s = "abc";
然后s
实际上是对String
的引用,严格来说。不是String
本身。对于对象(不是基元),您必须显式编写复制构造函数来创建副本。如果我将s
传递给方法,则会按值复制引用,但它仍会引用原始的String
对象。
答案 2 :(得分:0)
Client.parentUser将包含传递给setParentUser
方法的引用的副本。
请注意,如果按照以下方式执行某些操作:
public void setParentUser(User u) {
parentUser = u;
u = new User();
}
如果您修改User
的字段,则引用将被更改,并且不会更改对传递给函数的原始Client.parentUser
的引用。
答案 3 :(得分:0)
c.setParentUser(this);
这是Has A
关系,它只保存User对象的对象引用。