2009-04-19 15 views
11

ho dichiarato quanto segue hashmap:la get() funzione per Java HashMaps

HashMap<Integer, Hive> hives 

Dove Hive è un oggetto.

Se chiamo "hives.get (2)" restituirà una copia dell'oggetto Hive in quella posizione o un riferimento ad esso?

Il mio obiettivo è modificare l'oggetto Hive in quella posizione. Se restituisce il riferimento, posso semplicemente modificare l'hive restituito ed essere fatto. Tuttavia, se viene restituita una copia, dovrò rimetterla nella hashmap.

Ci scusiamo per la semplice domanda. Ho provato a cercare una soluzione, ma ovunque guardassi diceva semplicemente che il valore sarebbe stato restituito, non ha detto se sarebbe stata una copia del valore o un riferimento ad esso.

Grazie, Zain

risposta

16

restituisce un riferimento. Si può praticamente assumere questo caso, se non diversamente specificato.

8

Otterrete un riferimento ad esso: gli oggetti Java vengono sempre passati per riferimento.

+1

- Java è un valore passato. http://javadude.com/articles/passbyvalue.htm – cherouvim

+6

Ok, dal momento che non è possibile effettuare il deferenziazione di puntatori di oggetti in Java, suppongo che sia * tecnicamente * passaggio per valore. Ma dire che sarebbe totalmente fuorviante per la persona che ha posto la domanda. A mio avviso, sembra una specie di argomento spinoso. – hbw

+4

Tutto in Java è passato per valore. Si passano i riferimenti agli oggetti per valore. Se hai passato il riferimento all'oggetto per riferimento, allora potresti cambiare il valore del riferimento. Di seguito, un metodo chiamato potrebbe cambiare il valore del riferimento nel metodo del callee. Java non supporta questo, perché è solo passaggio per valore. –

4

in java tutto tranne byte, breve, int, long, float, double e char viene passato per riferimento. i tipi precedenti sono i soli tipi primitivi in ​​java e vengono passati per valore. Se si desidera una copia in base al valore, è necessario creare il proprio metodo nell'oggetto che restituirà una copia profonda di se stesso.

+0

- Java è passato per valore. http://javadude.com/articles/passbyvalue.htm – cherouvim

+2

ok. java è strettamente pass per valore, tuttavia ciò che passa è un riferimento all'oggetto. –

+4

È una differenza fondamentale - se Java fosse realmente "passa per riferimento", allora se hai detto myHashMap.get (2) = null allora l'oggetto originale passato in HashMap con la chiave 2 ora sarebbe nullo. Ma non lo farà. Sì, l'intero "passaggio per valore in cui il valore è effettivamente un riferimento" è confuso, ma è importante capirlo effettivamente. –