1
HashMap<String, String> user= new HashMap<String, String>();
user.put("userID","1");
user.put("useValue", "false");

これらkeysvalues.

Patient filterList = new Patient();
filterList.setUser(user);

ここで、患者クラスの別のインスタンスを作成します。

Patient addRequest = new Patient();
user.remove("useValue");
addRequest.setUser(user);

両方のオブジェクトから削除されるのはなぜですか? filterList オブジェクトが完全に形成された後にのみキーを削除していますが。

4

3 に答える 3

3

オブジェクト(filterList.setUser(user);)addRequest.setUser(user); 同じオブジェクトを指しているため、変更は同じオブジェクトに有効です。

setUser(...)実際にはコピーを作成しません。ユーザーオブジェクトへの参照を設定するだけです。

注意深く観察すると、どちらの場合も参照はユーザーであり、で作成された同じオブジェクトを指していますHashMap<String, String> user= new HashMap<String, String>();

于 2012-11-02T13:51:27.693 に答える
1

When you are setting the map in your class, you are not creating a new copy of your map. Rather a copy of reference is created in that class pointing to the same HashMap object. So any change you make to the Map using any reference, will get reflected for all the references.

So, all the references - user, the one in filterList.setUser and addRequest.setUser are pointing to the same HashMap object.

于 2012-11-02T13:52:54.923 に答える
1

あなたの例にはハッシュマップオブジェクトが1つしかありません。

HashMap<String, String> user= new HashMap<String, String>();

オブジェクト filterList と addRequest は両方とも、単一のユーザー オブジェクトに依存しています。そのため、ユーザー オブジェクトに変更を加えると、filterList と addRequest の両方に影響します。

変更を filterList と addRequest の両方に反映させたくない場合は、2 つのハッシュマップ オブジェクトを作成します。

    HashMap<String, String> user1= new HashMap<String, String>();
    HashMap<String, String> user2 = new HashMap<String, String>();
    user1.put("userID","1");
    user1.put("useValue", "a");
    user2 =  (HashMap<String, String>)user1.clone();
    user1.remove("userID");
    System.out.println(user2.get("userID"));
    System.out.println(user1.get("userID"));

お役に立てれば..

于 2012-11-02T14:19:05.543 に答える