0

我有一个这样的 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

4 回答 4

5

它存储一个引用,如 C/C++ 指针。该变量引用与(在类中)parentUser相同的对象。thisUser

如果你想复制,你需要明确地这样做。

于 2013-03-06T11:33:09.110 回答
2

参考,不是抄袭。

Java 中除原始类型(int、double 等)之外的所有内容都是参考。如果我写:

String s = "abc";

thens实际上是对 a 的引用String,严格来说。String 本身不是。对于对象(不是原语),您必须显式编写复制构造函数来创建副本。如果我传递s给一个方法,引用是按值复制的,但它仍然引用原始String对象。

于 2013-03-06T11:33:42.803 回答
0

Client.parentUser 将包含传递给setParentUser方法的引用的副本。

请注意,如果执行以下操作:

public void setParentUser(User u) {
    parentUser = u;
    u = new User();
}

User如果您修改Client.parentUser.

于 2013-03-06T11:33:33.300 回答
0
c.setParentUser(this);

这是Has A关系,它只是保存用户对象的对象引用。

于 2013-03-06T11:34:18.387 回答