0

次のような User.class があります。

public class User {
    private HashSet<Client> clients;
    ...
    public void addClient(Client c) {
        c.setParentUser(this);
        clients.add(c);
}

そして Client クラス:

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";

thenは、厳密に言えば、s実際には a への参照です。それ自体Stringではありません。オブジェクト (プリミティブではない) の場合、コピーを作成するためにコピー コンストラクターを明示的に記述する必要があります。メソッドに渡すと、参照は値によってコピーされますが、それでも元のオブジェクトを参照します。String sString

于 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 ARelationship で、 User オブジェクトのオブジェクト参照を保持するだけです。

于 2013-03-06T11:34:18.387 に答える