Zuerst setzen Sie nie ein Objekt auf Null. Dieses Konzept hat keine Bedeutung. Sie können einen Wert von null
einer Variablen zuweisen, aber Sie müssen sehr sorgfältig zwischen den Begriffen "Variable" und "Objekt" unterscheiden. Sobald Sie das tun, wird Ihre Frage sich selbst beantworten :)
Jetzt in Bezug auf "seichte Kopie" vs "Deep Copy" - es ist wahrscheinlich wert, den Begriff "flache Kopie" hier zu vermeiden, wie in der Regel eine flache Kopie beinhaltet erstellen ein neues Objekt, aber nur die Felder eines vorhandenen Objekts direkt kopieren. Eine tiefe Kopie würde eine Kopie der Objekte, auf die sich diese Felder beziehen, ebenfalls übernehmen (für Referenztyp-Felder). Eine einfache Zuordnung wie folgt aus:
ArrayList<String> list1 = new ArrayList<String>();
ArrayList<String> list2 = list1;
... macht nicht entweder eine flache Kopie oder eine tiefe Kopie in diesem Sinne. Es kopiert nur die Referenz. Nach dem obigen Code sind list1
und list2
unabhängige Variablen - sie haben zufällig die gleichen Werte (Referenzen). Wir könnten den Wert einer von ihnen ändern, und es würde die anderen nicht beeinflussen:
list1 = null;
System.out.println(list2.size()); // Just prints 0
Nun, wenn anstelle der Änderung der Variablen wir eine Änderung an dem Objekt machen, dass die Variablen Werte beziehen sich auf , wird diese Änderung über die andere Variable zu sehen sein:
list2.add("Foo");
System.out.println(list1.get(0)); // Prints Foo
auf Ihre ursprüngliche Frage Also zurück - man kann nie eigentlichen Objekte speichern in einer Karte, Liste, Array etc. Sie immer nur Referenzen speichern.Ein Objekt kann nur dann als Müll gesammelt werden, wenn es keine Möglichkeit mehr gibt, wie "lebendiger" Code dieses Objekt erreichen kann. Also in diesem Fall:
List<String> list = new ArrayList<String>();
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("Foo", list);
list = null;
... das ArrayList
Objekt kann immer noch nicht Müll gesammelt werden, da die Map
einen Eintrag hat, die es sich bezieht.
Ich fand immer eine der attraktivsten Aspekte der Java der Garbage Collector ist ... –