簡體   English   中英

Java:同一對象的多種表示形式

[英]Java: Multiple representations of the same object

我有一個像這樣的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 (用戶)完全相同的新對象?

它存儲一個引用,例如C / C ++指針。 變量parentUser引用與this對象相同的對象(在User類中)。

如果要復制,則需要明確地進行。

這是參考 ,不是副本。

Java中除原語 (int,double等)之外的所有內容都是參考。 如果我寫:

String s = "abc";

那么嚴格來說, s實際上是對String的引用。 本身不是String 對於對象(不是原語),您必須顯式編寫一個副本構造函數以創建副本。 如果我將s傳遞給方法,則引用將按值復制,但仍引用原始的String對象。

Client.parentUser將包含傳遞到setParentUser方法中的引用的副本。

請注意,如果執行以下操作:

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

如果您修改Client.parentUser的字段,則引用將被更改,並且傳遞給函數的原始User的引用也將不會更改。

c.setParentUser(this);

這是“ Has A關系”,它僅包含User對象的對象引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM