Java:同一对象的多个表示

时间:2013-03-06 11:31:49

标签: java class object reference

我有一个像这样的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(用户)完全相同的新对象?

4 个答案:

答案 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对象的对象引用。