2009-04-19 10 views
11

ich folgende hashmap erklärt habe:die get() Funktion für Java HashMaps

HashMap<Integer, Hive> hives 

Wo Hive ein Objekt ist.

Wenn ich "hives.get (2)" aufrufen, wird es eine Kopie des Objekts Hive an dieser Stelle oder eine Referenz darauf zurückgeben?

Mein Ziel ist es, das Hive-Objekt an diesem Ort zu ändern. Wenn es die Referenz zurückgibt, kann ich einfach die zurückgegebene Struktur ändern und fertig sein. Wenn jedoch eine Kopie zurückgegeben wird, muss ich diese Kopie wieder in die Hash-Map kopieren.

Sorry für die einfache Frage. Ich habe versucht, mich nach einer Lösung umzusehen, aber überall, wo ich hinsah, sagte ich einfach, dass der Wert zurückgegeben würde, es wurde nicht gesagt, ob es eine Kopie des Wertes oder ein Verweis darauf wäre.

Danke, Zain

Antwort

16

Es gibt eine Referenz. Sie können davon ausgehen, dass dies der Fall ist, sofern nicht anders angegeben.

8

Sie erhalten einen Verweis darauf - Java-Objekte werden immer als Referenz übergeben.

+1

- Java ist nach Wert übergeben. http://javadude.com/articles/passbyvalue.htm – cherouvim

+6

Okay, da Sie Objektzeiger in Java nicht dereferenzieren können, denke ich, es ist * technisch * pass-by-value. Aber das zu sagen, wäre für die Person, die die Frage stellte, völlig irreführend. Es scheint meiner Meinung nach eine Art pingeliges Argument zu sein. – hbw

+4

Alles in Java ist nach Wert. Sie übergeben Objektreferenzen nach Wert. Wenn Sie die Objektreferenz als Referenz übergeben haben, können Sie den Wert der Referenz ändern. Daher könnte eine aufgerufene Methode den Wert der Referenz in der aufgerufenen Methode ändern. Java unterstützt dies nicht, da nur Wert übergeben wird. –

4

In Java wird alles außer Byte, Kurz, Int, Lang, Float, Double und Char als Referenz übergeben. Die obigen Typen sind die einzigen primitiven Typen in Java und werden nach Wert übergeben. Wenn Sie eine Kopie nach Wert wünschen, müssen Sie eine eigene Methode im Objekt erstellen, die eine tiefe Kopie von sich selbst zurückgibt.

+0

- Java ist nach Wert übergeben. http://javadude.com/articles/passbyvalue.htm – cherouvim

+2

ok. Java ist streng nach Wert, aber was es übergibt, ist eine Referenz auf das Objekt. –

+4

Es ist ein Hauptunterschied - wenn Java wirklich "durch Verweis übergeben" wäre, wenn Sie myHashMap.get (2) = null sagten, wäre das ursprüngliche Objekt, das mit Schlüssel 2 an die HashMap übergeben wurde, nun null. Aber es wird nicht. Ja, das ganze "nach Wert, wo der Wert tatsächlich eine Referenz ist" ist verwirrend, aber es ist wichtig, es wirklich zu verstehen. –

Verwandte Themen