2009-04-19 9 views
11

he declarado lo siguiente HashMap:get() la función de Java HashMaps

HashMap<Integer, Hive> hives 

Dónde Colmena es un objeto.

Si llamo "hives.get (2)", ¿devolverá una copia del objeto Hive en esa ubicación o una referencia a ella?

Mi objetivo es modificar el objeto Hive en esa ubicación. Si devuelve la referencia, puedo simplemente modificar la colmena devuelta y terminar. Sin embargo, si se devuelve una copia, tendré que volver a colocar esa copia en el hashmap.

Disculpe la simple pregunta. Traté de buscar una solución, pero en todas partes que miré, simplemente decía que se devolvería el valor, pero no decía si sería una copia del valor o una referencia a él.

Gracias, Zain

Respuesta

16

devuelve una referencia. Puede suponer que este es el caso a menos que se especifique lo contrario.

8

Obtendrá una referencia: los objetos de Java siempre se pasan por referencia.

+1

- Java es pasar por valor. http://javadude.com/articles/passbyvalue.htm – cherouvim

+6

Está bien, ya que no se puede desreferenciar los punteros de los objetos en Java, creo que es * técnicamente * pasaje por valor. Pero decir eso sería totalmente engañoso para la persona que hizo la pregunta. Parece una especie de argumento quisquilloso, en mi opinión. – hbw

+4

Todo en Java pasa por valor. Pasa referencias de objeto por valor. Si pasó la referencia del objeto por referencia, puede cambiar el valor de la referencia. A continuación, un método llamado podría cambiar el valor de la referencia en el método de llamada. Java no es compatible con esto, ya que solo se pasa por valor. –

4

en Java todo, excepto byte, corto, int, largo, flotante, doble y char se pasa por referencia. los tipos anteriores son los únicos tipos primitivos en java, y se pasan por valor. Si quiere una copia por valor, necesita hacer su propio método en el objeto que le devolverá una copia en profundidad.

+0

- Java es pasar por valor. http://javadude.com/articles/passbyvalue.htm – cherouvim

+2

bien. java es estrictamente pasar por valor, sin embargo, lo que pasa es una referencia al objeto. –

+4

Es una diferencia clave: si Java fuera realmente "pasar por referencia", entonces si dijera myHashMap.get (2) = null, entonces el objeto original transferido al HashMap con la clave 2 ahora sería nulo. Pero no lo hará. Sí, todo el "valor de paso en el que el valor es realmente una referencia" es confuso, pero es importante entenderlo realmente. –

Cuestiones relacionadas